Java RandomAccessFile 示例
Java RandomAccessFile 提供了读取和写入文件数据的功能。RandomAccessFile 将文件作为存储在文件系统中的大字节数组,并使用游标移动文件指针位置。
Java随机访问文件
RandomAccessFile 类是Java IO的一部分。在 Java 中创建 RandomAccessFile 实例时,我们需要提供打开文件的模式。例如,要以只读模式打开文件,我们必须使用“r”,而对于读写操作,我们必须使用“rw”。使用文件指针,我们可以在任何位置从随机访问文件读取或写入数据。要获取当前文件指针,可以调用getFilePointer()
方法;要设置文件指针索引,可以调用seek(int i)
方法。如果我们在已经存在数据的任何索引处写入数据,它将覆盖它。
Java RandomAccessFile 读取示例
我们可以使用 Java 中的 RandomAccessFile 从文件中读取字节数组。下面是使用 RandomAccessFile读取文件的伪代码。
RandomAccessFile raf = new RandomAccessFile("file.txt", "r");
raf.seek(1);
byte[] bytes = new byte[5];
raf.read(bytes);
raf.close();
System.out.println(new String(bytes));
在第一行中,我们以只读模式为文件创建 RandomAccessFile 实例。然后在第二行中,我们将文件指针移动到索引 1。我们创建了一个长度为 5 的字节数组,因此当我们调用 read(bytes) 方法时,会从文件中读取 5 个字节到字节数组中。最后,我们关闭 RandomAccessFile 资源并将字节数组打印到控制台。
Java RandomAccessFile 写入示例
这是一个简单的例子,展示如何使用 Java 中的 RandomAccessFile 将数据写入文件。
RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
raf.seek(5);
raf.write("Data".getBytes());
raf.close();
由于 RandomAccessFile 将文件视为字节数组,因此写入操作可以覆盖数据,也可以将其附加到文件中。这完全取决于文件指针的位置。如果指针移动到文件长度之外,然后调用写入操作,则文件中将写入垃圾数据。因此,在使用写入操作时应注意这一点。
RandomAccessFile 附加示例
我们只需确保文件指针位于文件末尾即可将其附加到文件。以下是使用 RandomAccessFile 附加到文件的代码。
RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
raf.seek(raf.length());
raf.write("Data".getBytes());
raf.close();
Java RandomAccessFile 示例
这是一个完整的 java RandomAccessFile 示例,具有不同的读写操作。
package com.journaldev.files;
import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomAccessFileExample {
public static void main(String[] args) {
try {
// file content is "ABCDEFGH"
String filePath = "/Users/pankaj/Downloads/source.txt";
System.out.println(new String(readCharsFromFile(filePath, 1, 5)));
writeData(filePath, "Data", 5);
//now file content is "ABCDEData"
appendData(filePath, "pankaj");
//now file content is "ABCDEDatapankaj"
} catch (IOException e) {
e.printStackTrace();
}
}
private static void appendData(String filePath, String data) throws IOException {
RandomAccessFile raFile = new RandomAccessFile(filePath, "rw");
raFile.seek(raFile.length());
System.out.println("current pointer = "+raFile.getFilePointer());
raFile.write(data.getBytes());
raFile.close();
}
private static void writeData(String filePath, String data, int seek) throws IOException {
RandomAccessFile file = new RandomAccessFile(filePath, "rw");
file.seek(seek);
file.write(data.getBytes());
file.close();
}
private static byte[] readCharsFromFile(String filePath, int seek, int chars) throws IOException {
RandomAccessFile file = new RandomAccessFile(filePath, "r");
file.seek(seek);
byte[] bytes = new byte[chars];
file.read(bytes);
file.close();
return bytes;
}
}
这就是java中RandomAccessFile的全部内容。