从 RandomAccessFile 中读取

Reading From RandomAccessFile

我正在从一个简单的 RandomAccessFile 中读取 10 行并打印每一行。文本文件中的确切行如下:

蓝色

绿色

气泡

奶酪

百吉饼

拉链

糖果

鲸鱼

猴子

图表

当我逐行阅读时按顺序打印它们时,我的输出是这样的:

绿色

奶酪

拉链

鲸鱼

图表

我不明白为什么我的方法会跳过文件中的每一行。我误解了 RandomAccessFile 的工作原理吗?我的方法如下:

RandomAccessFile file = new RandomAccessFile(FILEPATH, "rw");
    read(file);

public static void read(RandomAccessFile t) throws IOException{
    while (t.readLine()!=null) {
        System.out.println(t.readLine());
    }
}

您正在呼叫 readLine() 两次

while (t.readLine()!=null) {
    System.out.println(t.readLine());
}

而是预先计算 readLine();

String tmp;
while((tmp = t.readLine()) != null) {
    System.out.println(tmp);
}

试试这个:

   String line = null;
    while ((line = br.readLine()) != null) {
    System.out.println(line);
    }

每次您调用 readlin() 时,它都会转到下一行,这就是为什么您只打印偶数行的原因。

在使用 RandomAccessFile 时,您也可以在任何搜索位置读取,而不是逐行读取以优化 I/O 性能。

RandomAccessFile raf = new RandomAccessFile("file","r");

raf.seek(info.getStartingIndex());//Maintain info while serializing obj
byte[] bytes = new byte[info.getRecordLength()];//length stored earlier similarly 
raf.read(bytes);
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
obj = ois.readObject();