因此,测试运行以查看该方法是否可以读取文件并返回其内容。我已经尝试了不同的更改,这是我到目前为止所做的。我能够在while循环中打印出所有必要的内容,但一旦离开该循环,fileContents返回“null”。
public static String readTestResults(String fileName) {
BufferedReader reader;
String fileContents = " ";
try {
reader = new BufferedReader(new FileReader(fileName));
fileContents = reader.readLine();
while (fileContents != null) {
System.out.println(fileContents);
fileContents = reader.readLine();
}
reader.close();
System.out.println("test: " + fileContents);
return fileContents;
}
catch (IOException e) {
e.printStackTrace();
}
System.out.println("Print if code reaches here");
return fileContents;
我添加了多个print语句,试图找出代码中可能存在bug的地方。它永远不会到达final语句。到目前为止,我的结果是:
Alex,Smith,99,A
Jolene,Schmidt,100,A
Mackinzie,Jensen,86,B
test: null
我需要它只返回那个名字列表,但只返回null。
我相信这可能是我的格式错误,但现在我被难住了。任何帮助将不胜感激!
1条答案
按热度按时间tkclm6bt1#
首先看一下JavaDocs for BufferedReader#readline,它清楚地声明 “或null,如果到达流的末尾而没有阅读任何字符”。
然后看看你的循环退出条件
while (fileContents != null) {
,这意味着在循环退出后fileContents
将是null
,这就是为什么当你执行return fileContents;
时,你会返回null
如果你只想返回一个
String
来表示文件的全部内容,你可以这样做。现在,就我个人而言,我不会在这里使用异常,而是抛出它,例如...
然后,调用者负责处理错误,这比返回
null
或空String
更有意义。你可能会发现使用
Files#readAllLines
会更容易,它会返回一个List<String>
--这将更容易解析IMHO。您还需要查看The try-with-resources Statement,以了解该代码实际上是如何工作的,以及为什么要使用它。