zvvq技术分享网

随机访问文件(随机访问文件)

作者:zvvq博客网
导读java 提供了 random access file 类,允许在文件的任意位置读取和写入数据。到目前为止,您使用过的所有流都称为 只读 或 只写 流。这些流称为顺序流。使用顺序流打开的文件称为顺序访

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

内容来自zvvq,别采集哟

RandomAccessFile类实现了DataInputDataOutput接口,如下图所示。 DataInput 接口定义了读取原始类型值和字符串的方法(例如,readIntreadDoublereadCharreadBooleanreadUTF),DataOutput接口定义了写入方法原始类型值和字符串(例如,writeIntwriteDoublewriteCharwriteBooleanwriteUTF)。

本文来自zvvq

zvvq好,好zvvq

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

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

zvvq

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

zvvq

如果不想修改文件,请使用r模式打开它。这可以防止无意中修改文件。 内容来自zvvq,别采集哟

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

zvvq.cn

zvvq

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

内容来自zvvq

.

内容来自samhan

1 内容来自samhan

2 内容来自samhan666

3

内容来自samhan

4

本文来自zvvq

5

内容来自zvvq

6

zvvq.cn

7 内容来自samhan

8 zvvq.cn

9

zvvq.cn

10 内容来自samhan

11

zvvq

12

内容来自zvvq,别采集哟

13 内容来自zvvq

14

内容来自zvvq

15

内容来自zvvq,别采集哟

16 内容来自zvvq,别采集哟

17 copyright zvvq

18 内容来自samhan666

19 zvvq

20 内容来自samhan666

21 zvvq好,好zvvq

22 copyright zvvq

23

本文来自zvvq

24 内容来自samhan

25

内容来自zvvq,别采集哟

26

本文来自zvvq

27

内容来自zvvq,别采集哟

28

内容来自samhan666

29

zvvq

30

zvvq好,好zvvq

31 内容来自zvvq,别采集哟

32 zvvq.cn

33 copyright zvvq

34

zvvq.cn

35

内容来自zvvq,别采集哟

36 copyright zvvq

37

zvvq

38

zvvq好,好zvvq

39 zvvq

40 zvvq.cn

41

内容来自samhan666

42 内容来自samhan

打包演示;

内容来自zvvq,别采集哟

导入java.io.*;

zvvq.cn

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

copyright zvvq

公共静态无效主(字符串[] args)抛出IOException {

zvvq.cn

try( // 创建一个随机访问文件

copyright zvvq

RandomAccessFile inout = new RandomAccessFile("inout.dat", "rw"); zvvq好,好zvvq

){

内容来自samhan

// 清除文件以销毁旧内容(如果存在) zvvq.cn

inout.setLength(0);

copyright zvvq

// 将新整数写入文件 内容来自zvvq

for(int i = 0; i 内容来自zvvq

<p>当前文件长度为800<br>

本文来自zvvq

第一个数字是0<br> copyright zvvq

第二个数字是1<br>

zvvq好,好zvvq

第十个数字是9<br> 内容来自samhan

新的长度是804<br>

copyright zvvq

第11个数字是555</p> 内容来自zvvq,别采集哟

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

zvvq

<p><strong>inout.setLength(0)</strong> 在第 11 行将长度设置为<strong>0</strong>。这实际上会破坏文件的旧内容。</p> 本文来自zvvq

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

</p>第 21 行调用 <p>inout.seek(0)<strong> 将文件指针设置到文件的开头。 </strong>inout.readInt()<strong> 读取第 22 行中的第一个值并将文件指针移动到下一个数字。第二个数字在第 26 行读取。</strong> 内容来自zvvq,别采集哟

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

zvvq好,好zvvq

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

内容来自samhan

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

内容来自samhan666

</p> 内容来自samhan

以上就是随机访问文件的详细内容,更多请关注其它相关文章!

内容来自zvvq