java 提供了 randomaccessfile 类,允许在文件的任意位置读取和写入数据。到目前为止,您使用过的所有流都称为 只读 或 只写 流。这些流称为顺序流。使用顺序流打开的文件称为顺序访问文件。顺序存取文件的内容无法更新。然而,经常需要修改文件。 java 提供了 randomaccessfile 类来允许在文件中的任何位置读取和写入数据。使用 randomaccessfile 类打开的文件称为 随机访问文件.

RandomAccessFile类实现了DataInput和DataOutput接口,如下图所示。 DataInput 接口定义了读取原始类型值和字符串的方法(例如,readInt、readDouble、readChar、readBoolean、readUTF),DataOutput接口定义了写入方法原始类型值和字符串(例如,writeInt、writeDouble、writeChar、writeBoolean、writeUTF)。

创建 RandomAccessFile 时,您可以指定两种模式之一:r 或 rw。模式r表示流是只读的,模式rw表示流允许读和写。例如,以下语句创建一个新流raf,它允许程序读取和写入文件test.dat:

RandomAccessFile raf = new RandomAccessFile("test.dat", "rw");

如果test.dat已经存在,则创建raf来访问它;如果 test.dat 不存在,则会创建一个名为 test.dat 的新文件,并创建 raf 来访问新文件。方法 raf.length() 返回任意给定时间 test.dat 中的字节数。如果将新数据追加到文件中,raf.length() 会增加。

如果不想修改文件,请使用r模式打开它。这可以防止无意中修改文件。

随机访问文件由字节序列组成。一个称为文件指针的特殊标记位于这些字节之一。读或写操作发生在文件指针的位置。打开文件时,文件指针设置在文件的开头。当您向文件读取或写入数据时,文件指针向前移动到下一个数据项。例如,如果使用readInt()读取int值,JVM会从文件指针读取4字节,现在文件指针比之前的位置提前4字节,如图所示下面.

对于RandomAccessFile raf,可以使用raf.seek(position)方法将文件指针移动到指定位置。 raf.seek(0) 将其移动到文件的开头,raf.seek(raf.length()) 将其移动到文件的末尾。下面的代码演示了RandomAccessFile.

打包演示;
导入java.io.*;

公共类测试随机访问文件{

公共静态无效主(字符串[] args)抛出IOException {
    try( // 创建一个随机访问文件
        RandomAccessFile inout = new RandomAccessFile("inout.dat", "rw");
    ){
        // 清除文件以销毁旧内容(如果存在)
        inout.setLength(0);

        // 将新整数写入文件
        for(int i = 0; i 

当前文件长度为800
第一个数字是0
第二个数字是1
第十个数字是9
新的长度是804
第11个数字是555

为名为inout.dat的文件创建RandomAccessFile,模式为rw,以允许第8行中的读取和写入操作。

inout.setLength(0) 在第 11 行将长度设置为0。这实际上会破坏文件的旧内容。

for循环将0199200个int值写入第14行和第15行的文件中。由于每个int值占用4字节,因此从返回的文件的总长度inout.length() 现在是 800(第 18 行),如示例输出所示。

第 21 行调用

inout.seek(0) 将文件指针设置到文件的开头。 inout.readInt() 读取第 22 行中的第一个值并将文件指针移动到下一个数字。第二个数字在第 26 行读取。

inout.seek(9 * 4)(第29行)将文件指针移动到第十个数字。 inout.readInt() 读取第十个数字,并将文件指针移动到第 30 行的第十一个数字。 inout.write(555) 在当前位置写入新的第十一个数字(第 33 行)。之前的第十一个号码被销毁了。

inout.seek(inout.length()) 将文件指针移动到文件末尾(第 36 行)。 inout.writeInt(999)999 写入文件(第 37 行)。现在文件的长度增加了4,因此inout.length()返回804(第4??0行)。

inout.seek(10 * 4) 将文件指针移动到第 43 行的第十一个数字。新的第十一个数字555显示在第 44 行。

    登录后复制以上就是随机访问文件的详细内容,更多请关注php中文网其它相关文章!