我正在尝试从Java文件中读取内容,然后将其关闭。但我不知道在何处放置close方法。
try {
Scanner scanner = new Scanner(new FileInputStream("data"));
while (scanner.hasNext()){
String line = scanner.nextLine().trim();
set.add(line);
}
//scanner.close();
} catch (FileNotFoundException e) {
System.out.println("data is not found");
e.printStackTrace();
} finally{
//scanner.close();
}
如您在代码中所看到的,我可能在两个地方放置close方法,一个在try里面,一个在最后。
如果我将其放在try子句中,则此后会失败,无法关闭扫描程序;但是,如果我将它放在finally子句中,则需要在尝试子句之前声明扫描器,这样,如果文件打开失败,则close方法最终就没有意义,因为扫描器仍然为null。
我知道这些想法一定有问题,有人可以指出吗?
最佳答案
如果您使用的是Java 8,则强烈建议使用try-with-resources:
try (Scanner scanner = new Scanner(new FileInputStream("data"))) {
while (scanner.hasNext()) {
String line = scanner.nextLine().trim();
set.add(line);
}
} catch (FileNotFoundException e) {
System.out.println("data is not found");
e.printStackTrace();
}
通过这种模式,java隐式添加了一个
finally
块来调用scanner.close()
。如果您无法利用Java 8的功能,那么最好的选择是在
scanner
块之前声明try
并在finally
中将其关闭时检查是否为null:Scanner scanner = null;
try {
scanner = new Scanner(new FileInputStream("data"));
while (scanner.hasNext()) {
String line = scanner.nextLine().trim();
set.add(line);
}
} catch (FileNotFoundException e) {
System.out.println("data is not found");
e.printStackTrace();
} finally {
if (scanner != null) {
scanner.close();
}
}