Java RandomAccessFile类的用法(附带实例)
在 Java 中,RandomAccessFile 类既不是输入流类的子类,也不是输出流类的子类。使用 RandomAccessFile 类可以实现以下两个目的:
RandomAccessFile 类常用的构造方法如下:
除了构造方法,RandomAccessFile 类还有如下两个核心的方法:
【实例】RandomAccessFile类的应用。
- 对一个文件执行读和写的操作。
- 可以访问文件的任意位置,不像其他流只能按照先后顺序读取。
RandomAccessFile 类常用的构造方法如下:
RandomAccessFile(File file,String mode) RandomAccessFile(String name,String mode)其中,mode 用来决定创建的流对文件的访问权利,可以是 r、rw、rws 或 rwd。其中,r 代表只读,rw 代表可读/写,rws 代表同步写入,rwd 代表将更新同步写入。
除了构造方法,RandomAccessFile 类还有如下两个核心的方法:
- void seek(long pos):用来定位流对象读/写文件的位置,使用pos确定读/写位置距离文件开头的字节个数。
- long getFilePointer():获得流的当前读/写位置。
【实例】RandomAccessFile类的应用。
import java.io.RandomAccessFile; public class Example { public static void main(String[] args) { RandomAccessFile randomf = null; try { randomf = new RandomAccessFile("D:\\3.txt", "rw"); // 将若干数据写入文件中 int[] data = new int[]{3, 8, 34, 333, 78, 21, 24, 43, 93, 555}; for (int i = 0; i < data.length; i++) { // 在文件中写入一个数组元素 randomf.writeInt(data[i]); } // 定位到第 4 个字节处 randomf.seek(4); // 读取当前位置的数据 System.out.println(randomf.readInt()); // 隔一个读一个数据 for (int i = 0; i < 10; i += 2) { randomf.seek(i * 4); System.out.print(randomf.readInt() + "\t"); } System.out.println(); // 在第 8 个字节的位置插入一个新的数据 38,替换之前的数据 34 randomf.seek(8); randomf.writeInt(38); for (int i = 0; i < 10; i++) { randomf.seek(i * 4); // 输出文件中的每个数据 System.out.print(randomf.readInt() + "\t"); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (randomf != null) { randomf.close(); } } catch (Exception e) { e.printStackTrace(); } } } }运行结果为:
8 3 34 78 24 93 3 8 38 333 78 21 24 43 93 555