RandomAccessFile 类实例 使用 readUTF() 方法 时,产生 java.io.EOFException 异常:
- readUTF() 只能读取由 writeUTF() 所写的文本
- 若定标至文件头读取,则必须保证所有文本均由 writeUTF() 所写
- 若遇到非由 writeUTF() 所写的内容,则会产生 java.io.EOFException 异常
代码:
//注意!readUTF只能读取由writeUTF所写的文本!
//若定标至文件头读取,则必须保证所有文本均由writeUTF所写
//若遇到非由writeUTF所写的内容,则会java.io.EOFException
import java.io.File;
import java.io.RandomAccessFile;
public class Main_02 {
// Main_02:通过长度标记,随机访问文件内容
public static void main(String[] args) {
File textFile = new File("C:/folder/Text.txt");
RandomAccessFile RAF;
// 随机写入:
try {
RAF = new RandomAccessFile(textFile, "rw");
System.out.println("修改前的文件长度:" + RAF.length());
// 定标至文件尾:
RAF.seek(RAF.length());
RAF.writeUTF("123");
System.out.println("修改后的文件长度:" + RAF.length());
// 通过比较,你会发现,RAF默认会多写入2个字节的空白字符(NUL)
} catch (Exception e) {
e.printStackTrace();
}
// 随机读取:
try {
RAF = new RandomAccessFile(textFile, "rw");
// 定标至文件头:
// 注意!文件未必完全由writeUTF所写!
// 若遇到非由writeUTF所写的内容,
// 则会爆java.io.EOFException
RAF.seek(0);
while (RAF.getFilePointer() < RAF.length()) {
System.out.print("" + RAF.readUTF());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}