ZVVQ代理分享网

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

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

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

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

创建 RandomAccessFile 时,您可以指定两种模式之一:rrw。模式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

.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

打包演示;

导入java.io.;

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

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

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

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

){

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

inout.setLength(0);

// 将新整数写入文件

for(int i = 0; i

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

第一个数字是0<br>

第二个数字是1<br>

第十个数字是9<br>

新的长度是804<br>

第11个数字是555</p>

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

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

<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>

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

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

</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>

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

</p>

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