1.JDK API中RandomAccessFile类的描述
|
此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针(实现数组随机读写)可以通过 getFilePointer 方法读取,并通过 seek 方法设置。
通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException(是一种 IOException)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。需要特别指出的是,如果流已被关闭,则可能抛出 IOException。



2.RandomAccessFile演示
1 public class RandomAccessFileDemo {
2
3 /**
4 * @代码来自传智播客
5 * @param args
6 * @throws IOException
7 */
8 public static void main(String[] args) throws IOException {
9
10
11 /*
12 * RandomAccessFile:
13 * 特点:
14 * 1,只能操作文件。
15 * 2,既能读,又能写。
16 * 3,维护了一个byte数组。内部定义了字节流的读取和写入。
17 * 4,通过对指针的操作可以实现对文件的任意位置的读取和写入。
18 */
19
20
21 // writeFile();
22 readFile();
23 }
24
25 public static void readFile() throws IOException {
26
27 RandomAccessFile raf = new RandomAccessFile("tempfile\\random.txt", "r");
28
29 //随机读取,只要通过设置指针的位置即可。
30 raf.seek(8*1);
31
32 byte[] buf = new byte[4];
33 raf.read(buf);
34 String name = new String(buf);
35
36 int age = raf.readInt();
37
38 System.out.println(name+":"+age);
39
40 raf.close();
41
42
43
44 }
45
46 public static void writeFile() throws IOException {
47
48 //1,创建一个随机访问文件的对象。文件不存在,则创建,存在,则不创建不覆盖。
49 RandomAccessFile raf = new RandomAccessFile("tempfile\\random.txt", "rw");
50
51 //2,写入姓名和年龄。
52 // raf.write("张三".getBytes());
53 // raf.writeInt(97);//保证整数的字节原样性。
54 // raf.write("李四".getBytes());
55 // raf.writeInt(99);//保证整数的字节原样性。
56
57 //3,随机写入。
58 raf.seek(8);//设置指针的位置。
59 raf.write("王武".getBytes());
60 raf.writeInt(100);
61 System.out.println(raf.getFilePointer());
62
63 raf.close();
64
65
66 }
67
68 }
2017-12-31 内容来自API和传智播客