RandomAccessFile:随機讀取檔案流 可以讀 寫檔案任意位置的資料
通過構造器建立對象
RandomAccessFile accessFile = new RandomAccessFile(fileName, "rw");
mode有四種模式
了解後看代碼
import org.junit.jupiter.api.Test;
import java.io.*;
import java.util.Arrays;
public class RandomAccessFileTest {
public static void main(String[] args) {
File file = new File("D:/a.txt");
try {
insert(file, 10, "您吃飯了沒有");
} catch (Exception e) {
e.printStackTrace();
System.out.println("插入失敗");
}
System.out.println("插入成功");
}
/**
* @param fileName 要插入的檔案
* @param position 插入的位置
* @param mess 插入的資訊
*/
private static void insert(File fileName, int position, String mess) throws Exception {
/**
* mode: r
* s
* rw
* rw
*/
RandomAccessFile accessFile = new RandomAccessFile(fileName, "rw");
//建立一個臨時檔案
File tempFile = File.createTempFile("temp", null);
//使用臨時檔案儲存插入點後的資料
FileOutputStream tmpOut = new FileOutputStream(tempFile);
FileInputStream tmpIn = new FileInputStream(tempFile);
//設定插入點
accessFile.seek(position);
//開始儲存插入點後的資料
byte[] bytes = new byte[20];
int len = 0;//實際存入資料的位元組數
while((len=accessFile.read(bytes))>0){
//将讀取的内容儲存到臨時檔案
tmpOut.write(bytes,0,len);
}
System.out.println("===="+tempFile.length());
//開始進行資料插入
accessFile.seek(position);
System.out.println(Arrays.toString(bytes));
accessFile.write(mess.getBytes());
while ((len=tmpIn.read(bytes))>0){
//将臨時檔案的内容重新放入磁盤檔案内
accessFile.write(bytes,0,len);
}
System.out.println(Arrays.toString(bytes));
}
}
效果:插入前