从RandomAccessFile读取

时间:2015-03-10 16:37:13

标签: java 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());
    }
}

3 个答案:

答案 0 :(得分:4)

您正在呼叫readLine()两次

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

而是预先计算readLine();

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

答案 1 :(得分:2)

试试这个:

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

每当你打电话给readlin()时,它就会转到下一行,这就是为什么你只打印出连线。

答案 2 :(得分:0)

使用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();