Java RandomAccessFile的用法详解
概述
Java RandomAccessFile是一个可以自由地读取文件内容的类,具体操作可以是文件任意位置的读、写和插入操作,支持读取任意类型的数据。
文件操作的基本流程是:我们先打开一个文件句柄(File),然后通过文件句柄创建 RandomAccessFile 对象,然后通过 RandomAccessFile 对象执行读取或写入操作。
使用方式
创建 RandomAccessFile 对象
我们需要先打开一个文件句柄,然后通过文件句柄创建 RandomAccessFile 对象。
File file = new File("test.txt");
RandomAccessFile raf = new RandomAccessFile(file, "rw");
这里传入的第二个参数 “rw”
表示我们可以对文件进行读写操作。
写入数据
写入数据可以使用 write()
方法或者 writeBytes()
方法,write()
方法是直接写入字节,而 writeBytes()
方法是写入字符串。
// 写入字符串
for (int i = 0; i < 10; i++) {
raf.writeBytes("Test:" + i);
}
// 写入整型数值
raf.writeInt(123);
读取数据
读取数据需要先将文件指针移到需要读取数据的位置,然后使用 readXXX()
方法读取数据,其中XXX可以是 Byte
、Int
、Float
等类型。
// 将文件指针移到第5个字符处
raf.seek(4);
// 读取字符串
byte[] buf = new byte[10];
raf.read(buf, 0, 10);
String str = new String(buf);
System.out.println(str);
// 读取整型数值
int num = raf.readInt();
System.out.println(num);
文件指针操作
文件指针(也称文件计数器)指向读取或写入数据的位置,可以通过 getFilePointer()
来获取文件指针的位置,也可以通过 seek()
方法来移动文件指针到指定位置。
// 获取当前文件指针位置
long currentPos = raf.getFilePointer();
// 将文件指针移动到文件开头
raf.seek(0);
示例
示例1 - 使用 RandomAccessFile 实现文件覆盖操作
下面的示例将一个文件的前10个字节进行覆盖,替换成新的内容,并在新内容之后添加原文件的剩余内容。
public static void replaceContentInFile(File file, String newContent) throws IOException {
byte[] newContentBytes = newContent.getBytes();
int length = (int) file.length();
byte[] buffer = new byte[length];
RandomAccessFile raf = null;
try {
raf = new RandomAccessFile(file, "rw");
raf.seek(0);
// 读取前10个字节并进行覆盖
int n = raf.read(buffer, 0, 10);
raf.seek(0);
raf.write(newContentBytes, 0, Math.min(newContentBytes.length, n));
raf.write(buffer, n, length - n);
} finally {
if (raf != null) {
raf.close();
}
}
}
示例2 - 生成指定大小的随机文件
下面的示例可以生成指定大小的随机文件。
public static void generateRandomFile(File file, int fileSize) throws IOException {
RandomAccessFile raf = null;
try {
raf = new RandomAccessFile(file, "rw");
// 每次写入1MB的数据
byte[] buffer = new byte[1024 * 1024];
int num = fileSize / buffer.length;
int last = fileSize % buffer.length;
Random random = new Random();
for (int i = 0; i < num; i++) {
random.nextBytes(buffer);
raf.write(buffer, 0, buffer.length);
}
if (last > 0) {
byte[] lastBuffer = new byte[last];
random.nextBytes(lastBuffer);
raf.write(lastBuffer, 0, last);
}
} finally {
if (raf != null) {
raf.close();
}
}
}
以上是Java RandomAccessFile的用法详解,如果您有任何疑问,可以在评论区留言。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java RandomAccessFile的用法详解 - Python技术站