Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的Java BufferedReader在文件开始和结束时读取空值?_Java_Bufferedreader - Fatal编程技术网

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

为什么我的Java BufferedReader在文件开始和结束时读取空值?,java,bufferedreader,Java,Bufferedreader,我很难看到下面的代码有什么问题。它在没有空值时输出空值 输出: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="";

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

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

我怀疑
content
一开始是空的(而不是空的),这解释了第一个
null
。不可否认,这并不能解释最后一个问题。。。我猜您实际上已经修复了一个bug,因为您在最后看到了带有
null
的输出。该文件或您的文件的末尾实际上有
null
。(我已经用
内容
初始化为“”对其进行了测试,结果很好。)

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


另外,考虑使用<代码> StringBuilder <代码>,而不是字符串级联——它将更高效,因为它不需要总是复制字符串。

< P>如果你用java开始,我建议更简单的…比如在文件上使用扫描仪。思考以下几点:

Scanner fileRead = new Scanner(fileName);

while ( fileRead.hasNextLine() ) {
    System.out.println( fileRead.nextLine() );
}
总之,我的建议。

只是一个评论

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

我以为它总是: 试一试{ .... .... .... }catch(){}


进一步阅读后,我发现这是Java 7的一个新特性,“try with resource”(from)

显示内容是如何初始化的,可能设置为null也更喜欢使用a而不是重复连接字符串。我只是想知道,如果BufferedReader检测到回车符,它会返回null吗?因此,第二个null可能是“seven”下的一个空行@christorday:Nope-它将为空行返回一个空字符串。它只在流的末尾返回
null
。感谢您花时间回答这个问题。我知道这与主要问题无关。谢谢,乔恩,你说得对。第二个空值是由最小化方法中的system.out引起的。如果他是Java新手,那么更容易用更简单的方法开始,这只是一个建议。如果是关于他的学习,而不是仅仅得到一个答案,我会认为它是有用的。