我本来写了个可以存入信息的地址簿,使用RandomAccessFile类来随机读写.当然可以使用GUI查看.反正说也说不清了.我就直接说下下面的一个测试程序来说明我的问题:
居然没有料到RandomAccessFile有自动更新文件的功能,如果你将指针放在文件中间,不是在指针位置插入内容,而是逐步更新内容,此时文件大小不会增加,除非你把指针放在文件末尾.
这也就是我的地址簿出错的原因,如果我在中间插入内容的话,就会出现原来的莫部分丢失的情况.
无语,真的无语,弄了半天才发现原来是这里出了问题.真不知道Java语言开发者的大脑怎么想的.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import
java.io.*;
class
test {
public
static
void
main(String[] args)
throws
IOException{
RandomAccessFile r =
new
RandomAccessFile(
"heihei.txt"
,
"rw"
);
r.writeChar(
'a'
);
r.writeChar(
'b'
);
r.writeChar(
'c'
);
//这样文件的内容不就应该是abc了吗?
r.seek(
2
);
//指针设置在a后.
r.writeChar(
'd'
);
//文件理应变成adbc,但貌似不是这么回事,如下
StringBuffer strBuf =
new
StringBuffer();
r.seek(
0
);
//指针归回初始位置
strBuf.append(r.readChar());
strBuf.append(r.readChar());
strBuf.append(r.readChar());
strBuf.append(r.readChar());
System.out.println(strBuf);
//结果是adc
}
}
|
居然没有料到RandomAccessFile有自动更新文件的功能,如果你将指针放在文件中间,不是在指针位置插入内容,而是逐步更新内容,此时文件大小不会增加,除非你把指针放在文件末尾.
这也就是我的地址簿出错的原因,如果我在中间插入内容的话,就会出现原来的莫部分丢失的情况.
无语,真的无语,弄了半天才发现原来是这里出了问题.真不知道Java语言开发者的大脑怎么想的.