java 提供了 randomaccessfile 类,允许在文件的任意位置读取和写入数据。到目前为止,您使用过的所有流都称为 只读 或 只写 流。这些流称为顺序流。使用顺序流打开的文件称为顺序访问文件。顺序存取文件的内容无法更新。然而,经常需要修改文件。 java 提供了 randomaccessfile 类来允许在文件中的任何位置读取和写入数据。使用 randomaccessfile 类打开的文件称为 随机访问文件.
内容来自zvvq,别采集哟
RandomAccessFile类实现了DataInput和DataOutput接口,如下图所示。 DataInput 接口定义了读取原始类型值和字符串的方法(例如,readInt、readDouble、readChar、readBoolean、readUTF),DataOutput接口定义了写入方法原始类型值和字符串(例如,writeInt、writeDouble、writeChar、writeBoolean、writeUTF)。
zvvq好,好zvvq
创建 RandomAccessFile 时,您可以指定两种模式之一:r 或 rw。模式r表示流是只读的,模式rw表示流允许读和写。例如,以下语句创建一个新流raf,它允许程序读取和写入文件test.dat: 内容来自samhan
RandomAccessFile raf = new RandomAccessFile("test.dat", "rw");
如果test.dat已经存在,则创建raf来访问它;如果 test.dat 不存在,则会创建一个名为 test.dat 的新文件,并创建 raf 来访问新文件。方法 raf.length() 返回任意给定时间 test.dat 中的字节数。如果将新数据追加到文件中,raf.length() 会增加。
zvvq
如果不想修改文件,请使用r模式打开它。这可以防止无意中修改文件。 内容来自zvvq,别采集哟
随机访问文件由字节序列组成。一个称为文件指针的特殊标记位于这些字节之一。读或写操作发生在文件指针的位置。打开文件时,文件指针设置在文件的开头。当您向文件读取或写入数据时,文件指针向前移动到下一个数据项。例如,如果使用readInt()读取int值,JVM会从文件指针读取4字节,现在文件指针比之前的位置提前4字节,如图所示下面.
对于RandomAccessFile raf,可以使用raf.seek(position)方法将文件指针移动到指定位置。 raf.seek(0) 将其移动到文件的开头,raf.seek(raf.length()) 将其移动到文件的末尾。下面的代码演示了RandomAccessFile
内容来自zvvq
.
1 内容来自samhan
2 内容来自samhan666
3
4
5
内容来自zvvq
6
zvvq.cn
7 内容来自samhan
8 zvvq.cn
9
zvvq.cn
10 内容来自samhan
11
12
13 内容来自zvvq
14
内容来自zvvq
15
16 内容来自zvvq,别采集哟
17 copyright zvvq
18 内容来自samhan666
19 zvvq
20 内容来自samhan666
21 zvvq好,好zvvq
22 copyright zvvq
23
24 内容来自samhan
25
26
本文来自zvvq
27
内容来自zvvq,别采集哟
28
内容来自samhan666
29
30
31 内容来自zvvq,别采集哟
32 zvvq.cn
33 copyright zvvq
34
35
36 copyright zvvq
37
38
zvvq好,好zvvq
39 zvvq
40 zvvq.cn
41
内容来自samhan666
42 内容来自samhan
打包演示;
导入java.io.*;
公共类测试随机访问文件{
copyright zvvq
公共静态无效主(字符串[] args)抛出IOException {
zvvq.cn
try( // 创建一个随机访问文件
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>
第十个数字是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>
</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>(第40行)。</strong>
内容来自samhan
</p><p>inout.seek(10 * 4)<strong> 将文件指针移动到第 43 行的第十一个数字。新的第十一个数字</strong>555<strong>显示在第 44 行。</strong>
内容来自samhan666
</p> 内容来自samhan
以上就是随机访问文件的详细内容,更多请关注其它相关文章!