从 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();
我正在从一个简单的 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();