【发布时间】:2021-03-15 18:33:42
【问题描述】:
我试图在 finally 块中关闭 Scanner 和 PrintStream,它们在 try 块中声明。问题是,如果 try-block 由于异常而失败,则永远不会声明 Scanner 和 Printstream,从而导致 finally-block 中出现错误,我想在其中关闭它们。代码如下:
try {
File readFile = new File(readFileName);
File writeFile = new File(writeFileName);
Scanner fileScanner = new Scanner(readFile);
PrintStream output = new PrintStream(new FileOutputStream(writeFile,false)); // overwrite
while(fileScanner.hasNextLine()) {
output.println(fileScanner.nextLine());
if (!fileScanner.hasNextLine()) {
break;
}
output.println();
}
}
catch (FileNotFoundException fnfe) {
System.out.println(fnfe.getMessage());
System.exit(0);
}
finally {
fileScanner.close();
output.close();
}
编辑:感谢您的回答,我通过在 try-block before 声明 Scanner 和 Printstream 然后在 try-block 中初始化它们来解决这个问题,就像这样:
Scanner fileScanner = null;
PrintStream output = null;
try {
fileScanner = new Scanner(readFile);
output = new PrintStream(new FileOutputStream(writeFile,false));
...
}
【问题讨论】:
-
搜索“try catch 资源”,
标签: java try-catch-finally printstream