java.io.RandomAccessFile
是 Java 标准库中提供的一个类,允许对文件进行随机访问读写操作。与 FileInputStream
和 FileOutputStream
不同,RandomAccessFile
可以读取和写入同一个文件,并且可以在文件的任意位置进行读写操作。它既可以作为输入流,也可以作为输出流使用。
RandomAccessFile
的主要功能
- 随机访问文件:可以通过设置文件指针在文件的任意位置进行读写操作。
- 读取和写入基本数据类型:支持读取和写入基本数据类型,如
int
、long
、float
、double
、byte
、char
、String
等。 - 双向操作:既可以进行读操作,也可以进行写操作。
构造方法
public RandomAccessFile(File file, String mode) throws FileNotFoundException
public RandomAccessFile(String name, String mode) throws FileNotFoundException
file
:要操作的文件对象。name
:要操作的文件名。mode
:文件的访问模式。常见的模式有:"r"
:以只读方式打开文件。"rw"
:以读写方式打开文件。如果文件不存在,则创建该文件。"rws"
:以读写方式打开文件,并对文件的内容或元数据的每个更新都同步写入到底层存储设备。"rwd"
:以读写方式打开文件,并对文件内容的每个更新都同步写入到底层存储设备。
常用方法
read()
:读取一个字节并返回(返回值是 0 到 255 之间的 int 值),如果已经到达文件末尾,则返回 -1。read(byte[] b)
:读取字节数组b
的数据。readInt()
、readLong()
、readUTF()
等:读取特定数据类型。write(int b)
:将一个字节写入文件。write(byte[] b)
:将字节数组b
的内容写入文件。writeInt(int v)
、writeLong(long v)
、writeUTF(String str)
等:写入特定数据类型。seek(long pos)
:将文件指针定位到pos
位置。getFilePointer()
:返回当前文件指针的位置。length()
:返回文件的长度。setLength(long newLength)
:设置文件的长度。
示例代码
下面是一个示例,演示如何使用 RandomAccessFile
进行文件的读写操作:
import java.io.IOException;
import java.io.RandomAccessFile;public class RandomAccessFileExample {public static void main(String[] args) {try {// 创建一个RandomAccessFile对象,以读写模式打开文件RandomAccessFile raf = new RandomAccessFile("example.txt", "rw");// 写入数据raf.writeInt(12345);raf.writeUTF("Hello, World!");// 获取文件指针的位置long pointer = raf.getFilePointer();System.out.println("Current file pointer position: " + pointer);// 将文件指针移动到文件开头raf.seek(0);// 读取数据int number = raf.readInt();String text = raf.readUTF();// 打印读取的数据System.out.println("Read int: " + number);System.out.println("Read UTF: " + text);// 关闭文件raf.close();} catch (IOException e) {e.printStackTrace();}}
}
在这个示例中,RandomAccessFile
用于将一个整数和一个字符串写入文件,然后将文件指针移回到文件的开头,并从文件中读取并打印这些数据。这展示了 RandomAccessFile
的随机访问能力,即可以在文件的任意位置进行读写操作。
注: raf.writeInt(12345); 整数数据,记事本打开不可见。