Java流笔记之RandomAccessFile

java.io.RandomAccessFile

RandomAccessFile是java的一个文件内容访问类,特点是支持”随机访问”,但只能对文件进行操作.
构造方法:

RandomAccessFile(File file/String fileName, String mode): mode为读写模式,分别有:
"r":只读,若写会抛出IOException
"rw":读写,若文件不存在则会创建
"rwd":读写,内容更新同步写到底层设备
"rws":读写,内容和元数据更新同步写到底层设备

常用方法:

long getFilePointer():返回文件中指针的位置
void seek(long index):将指针定位到index位置
void readXXX() void writeXXX() 读写

1.读取文件

import java.io.RandomAccessFile;
import java.io.IOException;
import java.io.FileNotFoundException;
public class RandomAccessFileTest{
	    public static void main(String[] args) {
	    try(
		    RandomAccessFile raf = new             
            RandomAccessFile("RandomAccessFileTest.java","rw");
		    ){
		    System.out.println("文件指针初始位置 :     "+raf.getFilePointer());
		    byte[] buffer = new byte[32];
		    int hasRead;
		    while ((hasRead = raf.read(buffer)) > 0) {
		    	    System.out.print(new String(buffer,0,hasRead));
		    }
	    }catch (IOException e) {
	    	e.printStackTrace();
	    }
    }
}

2.追加内容

import java.io.RandomAccessFile;
import java.io.IOException;
import java.io.FileNotFoundException;
public class RandomAccessFileTest{
	public static void main(String[] args) {
		try(
			RandomAccessFile raf = new RandomAccessFile("RandomAccessFileTest.java","rw");
		){
			System.out.println("文件字节数 : " + raf.length());
			raf.seek(raf.length());
			System.out.println("当前文件指针位置: " + raf.getFilePointer());
			raf.write("//这是添加的内容".getBytes());

		}catch (IOException e) {
			e.printStackTrace();
		}
	}
}//这是添加的内容

3.修改内容

**注意:直接修改文件指针内容会直接覆盖内容**
import java.io.RandomAccessFile;
import java.io.IOException;
import java.io.FileNotFoundException;//这是添加的新内容//这是添加的新内容
public class RandomAccessFileTest{
	public static void main(String[] args) {
		try(
			RandomAccessFile raf = new RandomAccessFile("RandomAccessFileTest.java","rw");
		){
			System.out.println(raf.getFilePointer());
			raf.seek(101);
			//将剩余内容缓存到content
			byte[] buffer = new byte[1024];
			int hasRead;
			String content = "";
			while ( (hasRead = raf.read(buffer)) > 0) {
				content += new String(buffer,0,hasRead);
			}
			System.out.println(content);
			raf.seek(101);
			//开始修改内容
			raf.write("//这是添加的新内容".getBytes());
			raf.write(content.getBytes());
		}catch (IOException e) {
			e.printStackTrace();
		}
	}
}//这是添加的内容