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!