3

我无法看到下面的代码有什么问题。它在没有空值时输出空值。

输出: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);
4

3 回答 3

7

我怀疑content以 null 开头(而不是空),这解释了第一个null. 诚然,它没有解释最后一个...我的猜测是,自从您null在最后看到输出后,您实际上已经修复了一个错误。无论是那个还是你的文件实际上null在最后。(我已经用content初始化为“”对其进行了测试,这很好。)

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

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

于 2013-02-28T20:19:44.440 回答
0

只是一个评论...

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

我以为总是这样:try { .... .... .... } catch() {}

进一步阅读,发现这是 Java 7 的一个新特性,“try with resource”(来自Java try catch 块的特殊语法

于 2013-02-28T21:30:59.257 回答
-2

如果您从 Java 开始,我建议您使用更简单的方法……例如在文件上使用 Scanner。思考以下问题:

Scanner fileRead = new Scanner(fileName);

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

反正我的建议。

于 2013-02-28T20:22:07.150 回答