使用BufferedReader在Java中读取.txt文件

时间:2018-05-01 09:07:26

标签: java file-io bufferedreader filereader

我正在使用BufferedReader从Java读取.txt个文件但它的行为很奇怪。有些文件是正常读取的,有些文件返回几行空行并返回null或跳过前几行文本并打印休息。我检查了路径,编码,属性,我试图读取的那些文件中的一切都是一样的但是代码读取了一个文件而其他文件不会。

System.out.println("\r\nChose desired shelf:");
String shelf = br.readLine();
FileReader fr = new FileReader("D:\\admir\\MyBookLibrary\\"+shelf+"\\Info.txt");
BufferedReader info = new BufferedReader(fr);
while(info.readLine() != null) {
    System.out.println(info.readLine());
}
fr.close();
info.close();

2 个答案:

答案 0 :(得分:3)

您正在阅读readLine()两次的行,这意味着您将每隔一行打印一次。您还应该使用try-with-resource来管理AutoCloseable个对象:

String shelf = br.readLine();
Path path = Paths.get("D:", "admir", "MyBookLibrary", shelf, "Info.txt");
try (BufferedReader br = Files.newBufferedReader(path)) {
  br.lines().forEach(System.out::println);
}

答案 1 :(得分:0)

由于您的代码有info.readLine()两次,因此将跳过为所有文件打印备用行。 对于正确打印的文件,您可能在每行文本后面都有一个空行或换行符\n,并且同时跳过该行。 在其他文件中,它必须跳过备用行。 你能检查文件的实际内容吗?

我已稍微修改了您的代码,现在可以使用了:

System.out.println("\r\nChose desired shelf:");
String shelf = br.readLine();
FileReader fr = new 
FileReader("D:\\admir\\MyBookLibrary\\"+shelf+"\\Info.txt");
BufferedReader info = new BufferedReader(fr);
String line;
while((line = info.readLine()) != null) {
    System.out.println(line);
}
fr.close();
info.close();