InputStream和OutputStream都只是单方面的读和写文件的内容,如果有随机的读取和写入文件内容的需要那该怎么办?
Java为我们提供了一个RandomAcessFile类,它就是专门用来随机存取文件的内容的。
RandomAcessFile操作文件内容的时候,就好像操作一块内存区域一样。把字节用下标数字来进行定位,通过调用RandomAcessFile的API方法,把指针的指向进行一定,达到随机存取数据的目的,主要的方法如下:
length() 得到文件内容的字节长度
seek() 设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。
read()和write() 读取和写入字节数据
以下是将文件中的所有字母a换成字母的c的示例程序。
public class Test5 {
public static void main(String[] args) {
try {
//创建随机读取文件对象
RandomAccessFile file=new RandomAccessFile("D://1.txt", "rw");
//遍历file的字节的数据
try {
for (int i = 0; i < file.length(); i++) {
byte b=(byte) file.read();//read()方法读取一个字节
char c=(char) b;//转换成char类型
if(c=='a'){
file.seek(i);
file.write('c');//这个位置写入新的字符
}
}
file.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
说明:RandomAcessFile的大多数方法都会抛出IOException,以上示例程序只是简单的try-catch,而在实际的开发中,应该针对不同的情况,不同的异常做出不同的响应。
总结:
RandomAcessFile的使用思路主要包括以下一些项目:
1.用length()方法获取文件的内容长度
2.用seek()方法随机的到达任何需要存储数据的地方
3.调用read()方法获取当前位置的数据,用write()方法写入数据
4.完成需要后,调研close方法关闭文件的打开