为什么我的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新手,那么更容易用更简单的方法开始,这只是一个建议。如果是关于他的学习,而不是仅仅得到一个答案,我会认为它是有用的。