Java RandomAccessFile类:随机读写文件(附带实例)
Java 的 RandomAccessFile 类包装了一个随机访问的文件,直接继承于 Object 类而非 InputStream/OutputStream 类。
对于 InputStream 和 OutputStream 来说,它们的实例都是顺序访问流,而且读取数据和写入数据必须使用不同的类。随机文件突破了这种限制。在 Java 中,类 RandomAccessFile 提供了随机访问文件的方法,它可以实现读写文件中任何位置的数据,允许使用同一个实例对象对同一个文件交替进行读写操作。
RandomAccessFile 类的常用操作方法如下表所示:
RandomAccessFile 有如下两种构造方法:
mode 为 r,以只读方式打开,Mode 为 rw,可读可写,不存在则创建。
采用 RandomAccessFile 类对象读写文件内容的原理是将文件看作字节数组,并用文件指针指示当前位置。初始状态下,文件指针指向文件的开始位置。读取数据时,文件指针会自动移过读取过的数据,还可以改变文件指针的位置。
【实例 1】向文件写入数据,然后从头输出文件内容到显示器。
对于 InputStream 和 OutputStream 来说,它们的实例都是顺序访问流,而且读取数据和写入数据必须使用不同的类。随机文件突破了这种限制。在 Java 中,类 RandomAccessFile 提供了随机访问文件的方法,它可以实现读写文件中任何位置的数据,允许使用同一个实例对象对同一个文件交替进行读写操作。
RandomAccessFile 类的常用操作方法如下表所示:
| 方法 | 方法说明 |
|---|---|
| long getFilePointer() | 返回文件指针的当前位置 |
| long length() | 返回文件的长度 |
| void close() | 关闭操作 |
| int read(byte[] b) | 将内容读取到一个 byte 数组中 |
| byte readByte() | 读取一个字节 |
| int readInt() | 从文件中读取整型数据 |
| void seek(long pos) | 设置读指针的位置 |
| void writeBytes(String s) | 将一个字符串写入文件,按字节的方式处理 |
| void writeInt(int v) | 将一个 int 型数据写入文件,长度为 4 位 |
| int skipBytes(int n) | 指针跳过多少字节 |
RandomAccessFile 有如下两种构造方法:
- RandomAccessFile(File file, String mode):创建读取和写入的随机存取文件流,文件由 File 参数指定;
- RandomAccessFile(String name, String mode):创建读取和写入的随机存取文件流,文件具有指定名称。
mode 为 r,以只读方式打开,Mode 为 rw,可读可写,不存在则创建。
采用 RandomAccessFile 类对象读写文件内容的原理是将文件看作字节数组,并用文件指针指示当前位置。初始状态下,文件指针指向文件的开始位置。读取数据时,文件指针会自动移过读取过的数据,还可以改变文件指针的位置。
【实例 1】向文件写入数据,然后从头输出文件内容到显示器。
import java.io.RandomAccessFile;
import java.io.IOException;
public class RandomAccessFileExample {
public static void main(String[] args) {
String fileName = "example.txt";
RandomAccessFile file = null;
try {
// 创建 RandomAccessFile 对象
file = new RandomAccessFile(fileName, "rw");
// 写入数据到文件
file.write("Hello, World!".getBytes());
// 定位文件指针到文件开头
file.seek(0);
// 读取文件内容并输出到控制台
byte[] buffer = new byte[1024];
int bytesRead = file.read(buffer);
System.out.println(new String(buffer, 0, bytesRead));
// 关闭 RandomAccessFile 对象
file.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (file != null) {
try {
file.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
程序执行结果为:
Hello, World!
ICP备案:
公安联网备案: