为什么我的Java BufferedReader在文件的开始和结束时读取空值?

时间:2013-02-28 20:18:00

标签: java bufferedreader

我无法查看下面的代码有什么问题。当没有任何内容时输出空值。

输出:null This is one. This is two. This is three. This is four five six. seven? null

文件内容:

This is one.
This is two.
This is three.
This is four
five
six.
seven?

对此的任何帮助将不胜感激!

try (BufferedReader br = new BufferedReader(new FileReader(filename))) {

    String cLine="";
    while ((cLine = br.readLine()) != null) {
        content+= cLine;

    }
} catch (IOException e) {
    e.printStackTrace();
}

System.out.println(content);

3 个答案:

答案 0 :(得分:7)

我怀疑content是空的,而不是空的,这解释了第一个null。它没有解释最后一个,不可否认......我的猜测是你实际修复了一个错误,因为你最后看到null的输出。这个或您的文件实际上最后都有null。 (我已经将content初始化为“”进行了测试,这很好。)

你是否意识到你正在删除所有换行符,而不是用任何类型的分隔符替换它们?因此,带有“x”,“y”和“z”行的文件将变为“xyz”。

此外,考虑使用StringBuilder而不是字符串连接 - 它会更有效率,因为它不需要一直复制字符串。

答案 1 :(得分:0)

只是评论......

我不知道这种语法的尝试。最初我认为这是一个错字,但我发现它确实有效(我编译并运行代码)。

我认为它总是: 尝试{ .... .... .... } catch(){}

进一步阅读,发现这是Java 7的一个新功能,“试用资源”(来自Special syntax of java try catch block

答案 2 :(得分:-2)

如果您从Java开始我建议更简单...就像在文件上使用扫描仪一样。请考虑以下事项:

Scanner fileRead = new Scanner(fileName);

while ( fileRead.hasNextLine() ) {
    System.out.println( fileRead.nextLine() );
}

反正我的建议。