IO输入输出流学习笔记(第二篇)(JAVA)

一、摘要 

   本文继续上一篇IO文章继续介绍IO输入输出流的基础知识,读者可能发现对于前一篇IO文章的一些处理文件的类的操作有一些繁琐,并且代码结构不管怎么设计都显得有些复杂。接下来的文章目标就是介绍几个Java常用(新出)的一些类或工具类。不足之处请指正。

二、RandomAccessFile

RandomAccessFile类是Java输入/输出流体系中功能非常丰富的文件内容访问类,注意是文件内容,所以可是看出 RandomAccessFile类的最大局限就是只能读写文件,不能读写其他IO节点(eg:已经存在的流)。但是从类名也可以看出Random,字面理解是随机,也就是此类提供随机访问文件的功能,其实这里说的随机就是任意的意思,即提供任意读写文件,程序可以直接跳到文件的任意地方进行读写数据。并且RandomAccessFile对象包含了一个记录指针,可以自由地移动改记录指针。

RandomAccess有两个构造器,两个参数,一个是使用File参数指定文件本身,一个是mode参数。

mode参数包含四个值: 1. “r” 以只读的方式打开文件  2. “rw” 以读写的方式打开指定文件,如果文件不存在,则会创建文件。

    3. “rws”   4. “rwd”

简单代码示例如下:

package Kobe;
import java.io.*;

public class RandomFileTest {
	public static void main(String[] args) {
		try {
			RandomAccessFile raf = new RandomAccessFile("E:/javastudy/eclipse/JZ/src/Kobe/RandomFileTest.java", 
						"r");
				System.out.println("start:: " + raf.getFilePointer());
				raf.seek(260);
				byte[] bb = new byte[1024];
				while(raf.read(bb) > 0) {
					System.out.print(new String(bb, 0, 1024));
				}
			}catch(IOException ioe) {
				ioe.printStackTrace();
			}
	}
}
如上述代码所示,创建RandomAccessFile对象,构造器初始化,传入指定文件作为参数,“r”指定以只读方式打开文件,raf引用调用seek方法是RandomAccessFile类的方法,用于指定记录指针的位置。参数是260,即从260字节处开始输出文件内容。接下来的代码与原来的InputSream没有差别。

一下代码示范了如何向指定文件后追加内容,办法就是讲文件记录指针移动到文件的最后。代码如下

package Kobe;
import java.io.*;

public class AppendContent {
	public static void main(String[] args) {
		try {
			RandomAccessFile raf = new RandomAccessFile("E:/javastudy/eclipse/JZ/src/Kobe/outKobe.txt", "rw");
			raf.seek(raf.length());
			raf.write("append :".getBytes());
		}catch(IOException ioe) {
			ioe.printStackTrace();
		}
		try {
//			FileStream fs = new FileStream()
			FileInputStream fis = new FileInputStream("E:/javastudy/eclipse/JZ/src/Kobe/outKobe.txt");
			byte[] bbb = new byte[1024];
			while(fis.read(bbb) > 0) {
				System.out.println(new String(bbb, 0, 1024));
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}
上述代码的第一个try语句的作用域内直接将文件指针移动到文件的最后(raf.length),然后开始讲文件中输出(追加)内容(append),第二个try-catch是为了将文件内容打印到屏幕上。每次运行一遍上述代码都会在文件的最后添加一个append字符串。

三、NIO.2 

Java7对nio进行了很大的改进,全面支持文件io系统访问支持,本文介绍Files和Paths两个工具类。Files是一个操作文件的工具类,直接看代码:

package Kobe;
import java.io.*;
import java.nio.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;

public class FileTest {
	public static void main(String[] args) throws Exception {
		Files.copy(Paths.get("E:/javastudy/eclipse/JZ/src/Kobe/FileTest.java"), 
				new FileOutputStream("E:/javastudy/eclipse/JZ/src/Kobe/zqw.txt"));
		System.out.println("jugging FileTest.java is Hidden? " + Files.isHidden(Paths.get("E:/javastudy/eclipse/JZ/src/Kobe/FileTest.java")));
		List<String> lines = Files.readAllLines(Paths.get("E:/javastudy/eclipse/JZ/src/Kobe/FileTest.java"), 
				Charset.forName("gbk"));
		System.out.println(lines);
		System.out.println("文件大小为  " + Files.size(Paths.get("E:/javastudy/eclipse/JZ/src/Kobe/FileTest.java")));
		List<String> pom = new ArrayList();
		pom.add("世界那么大");
		pom.add("我想去看看");
		Files.write(Paths.get("E:/javastudy/eclipse/JZ/src/Kobe/nbnb.txt"), pom, Charset.forName("gbk"));
		
	}
}
上述代码是先FileTest.java文件内容copy到zqw.txt中,利用Files提供的readAllLines方法将文件每行都读出来存到List容器中并将List内容打印出来。Charset类是nio包提供的编解码类。再次创建一个动态数组即ArrayList,添加两个字符串进去,然后利用Paths.get方法指定文件,然后将ArrayList内容写入文件中。
以上内容是对JAVA文件io的工具类的基本介绍,望指教。

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值