我正在开发一项功能,使用户可以检查单个学生的评估结果。我使用try和catch,但是当我运行代码时,系统直接运行到catch部分,文件的内容为空。我不确定这个问题的原因。这是我的代码:
System.out.println('\n' + "Please enter the Student's uni that you would like to call. Type 'exit' to leave");
String studentInfo = s.nextLine();
if (studentInfo.equalsIgnoreCase("exit")) {
userSelection = "exit";
}
boolean studentFound = false;
for (int i = 0; i < students.size(); i++) {
if (studentInfo.equalsIgnoreCase(students.get(i).getStudentUI())) {
studentFound = true;
try {
File singleStudentList = new File(studentInfo + " .txt");
PrintWriter writer = new PrintWriter(singleStudentList);
System.out.println(studentUniLists.get(i));
writer.println(studentUniLists.get(students.indexOf(studentInfo)));
writer.close();
} catch (Exception e) {
System.out.println("Problem writing the file. Please make sure the path is correct");
}
}
}
感谢您的帮助!
答案 0 :(得分:1)
我的预感是你的错误属于以下两行之一:
System.out.println(studentUniLists.get(i));
writer.println(studentUniLists.get(students.indexOf(studentInfo)));
你没有包含关于studentUniLists是什么的代码,所以这里有一些猜测。
我的猜测是,students.indexOf(studentInfo)可能会返回-1,所以当你在List
上执行studentUniLists.get(-1)时,这会给你一个{{1} }。你应该只抓住IndexOutOfBoundsException
,以便你可以发现这类问题
答案 1 :(得分:0)
可能在某处索引越界,例如:
System.out.println(studentUniLists.get(i));
你确定studentUniLists
有索引吗?
既然你写了没有输出,它只是直接捕获。
如其他地方所述,打印实际异常会有所帮助。
答案 2 :(得分:0)
您捕获任何异常并向控制台打印这是与文件相关的问题。它不一定是。 我建议你添加到你的catch子句e.printStackTrace()来打印真正的问题。其次,你应该考虑避免捕获异常,因为它太宽泛了。可能值得捕捉与文件问题有关的异常,并将其余部分保留为未被捕获。
查看文档 - PrintWriter不太可能抛出错误。 Comstructor可能会抛出FileNotFoundException或SecurityException。 CheckErrors是检查文件相关错误所需的功能。 https://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html#checkError()。但我相信你有非文件相关的问题,如NullPointerException或IndexOutOfBoundsException。
希望这有帮助。
答案 3 :(得分:0)
首先,使用Jdk 1.7打开文件时,使用尝试使用ressources 让jvm自动关闭。
File singleStudentList;
try (singleStudentList = new File(studentInfo + " .txt")) {
PrintWriter writer = new PrintWriter(singleStudentList);
}
其次,错误就是这样:新文件(studentInfo +“。txt”) 你总是创建空文件“true .txt”
第三,按 ex.printStackTrace();
打印错误