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();
}
}
}//这是添加的内容
