文件追加;读取;指定位置(不覆盖)写入内容
package com.example.demo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.charset.StandardCharsets;
public class RafUtil {
public static void write(File file, long off, byte[] bytes) {
System.out.println(off);
try {
File tempFile = File.createTempFile("temp_write_" + file.getName(), ".txt");
FileOutputStream tmpOut = new FileOutputStream(tempFile);
FileInputStream tmpIn = new FileInputStream(tempFile);
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
randomAccessFile.seek(off);
byte[] buff = new byte[64];
int read = 0;
while ((read = randomAccessFile.read(buff)) > 0) {
tmpOut.write(buff, 0, read);
}
randomAccessFile.seek(off);
randomAccessFile.write(bytes);
while ((read = tmpIn.read(buff)) > 0) {
randomAccessFile.write(buff, 0, read);
}
randomAccessFile.close();
tmpIn.close();
tmpOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void read(File file) {
try {
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
String line = null;
while (null != (line = randomAccessFile.readLine())){
System.out.println(new String(line.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8));
System.out.println(" " + randomAccessFile.getFilePointer());
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void append(File file, byte[] bytes){
try {
RandomAccessFile accessFile = new RandomAccessFile(file, "rw");
long length = accessFile.length();
accessFile.seek(length);
accessFile.write(bytes);
} catch (IOException e) {
e.printStackTrace();
}
}
public static byte[] getBytes(File file, long begin, long end){
byte[] bytes = null;
try {
RandomAccessFile accessFile = new RandomAccessFile(file, "rw");
accessFile.seek(begin);
int len = Long.valueOf(end - begin).intValue();
byte[] buff = new byte[len];
accessFile.readFully(buff, 0, len);
bytes = buff;
} catch (Exception e) {
e.printStackTrace();
}
return bytes;
}
}