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