资源泄漏未关闭
Resource leak not closed
我用的是Eclipse,做下面的功能,正好打开了一个Scanner,然后,最后我关闭了它,但是Eclipse一直说它没有关闭“资源泄漏: 'scanner' 未关闭”。
我可以尝试使用资源来做到这一点,警告消失了,但我想了解为什么我在这里尝试的方式不起作用
private void follow(String userID) {
if(!(new File("../users/"+userID+"/")).exists()){
System.out.println("User especificado nao existe");
return;
}
File list = new File("../users/"+userID+"/followers.txt");
try {
list.createNewFile();
Scanner scanner = new Scanner(list);
while(scanner.hasNextLine()){
String line = scanner.nextLine();
if(line.equals(clientID)){
System.out.println("Cliente ja segue este user");
return;
}
}
PrintWriter out = new PrintWriter(new FileWriter(list, true));
out.append(clientID+"\n");
out.close();
scanner.close();
} catch (IOException e) {
e.printStackTrace();
}
}
#createNewFile()
可以在您到达 close()
语句之前抛出一个 IOException,防止它被执行。
将 out.close()
放在 finally 语句中:
finally {
out.close();
}
finally
的作用是,即使抛出错误,其中的任何代码都会执行。
Scanner 实现了 AutoCloseable;你可以使用 try-with-resources
https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
我用的是Eclipse,做下面的功能,正好打开了一个Scanner,然后,最后我关闭了它,但是Eclipse一直说它没有关闭“资源泄漏: 'scanner' 未关闭”。 我可以尝试使用资源来做到这一点,警告消失了,但我想了解为什么我在这里尝试的方式不起作用
private void follow(String userID) {
if(!(new File("../users/"+userID+"/")).exists()){
System.out.println("User especificado nao existe");
return;
}
File list = new File("../users/"+userID+"/followers.txt");
try {
list.createNewFile();
Scanner scanner = new Scanner(list);
while(scanner.hasNextLine()){
String line = scanner.nextLine();
if(line.equals(clientID)){
System.out.println("Cliente ja segue este user");
return;
}
}
PrintWriter out = new PrintWriter(new FileWriter(list, true));
out.append(clientID+"\n");
out.close();
scanner.close();
} catch (IOException e) {
e.printStackTrace();
}
}
#createNewFile()
可以在您到达 close()
语句之前抛出一个 IOException,防止它被执行。
将 out.close()
放在 finally 语句中:
finally {
out.close();
}
finally
的作用是,即使抛出错误,其中的任何代码都会执行。
Scanner 实现了 AutoCloseable;你可以使用 try-with-resources
https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html