在一些Java类中,我看到IO资源声明为实例变量,并在多个方法中使用。我该如何关闭它们?很少建议finalize(),他们也说不推荐。我可以知道是否有更好的方法吗? 例如:
public class test{
private PrintWriter writer=null;
public test(){
createWriter();
}
public void log(){
writer.write("test");
writer.flush();
}
public void createWriter(){
writer=new PrintWriter(new BufferedWriter(new FileWriter("file")));
}
}
最佳答案
在您的类中实现 AutoCloseable
并重写 close()
方法,并在此 close()
方法中关闭所有与 IO 相关的资源。
现在,如果您使用的是 Java 7,您可以使用 try 和资源创建对您的类的引用,JVM 将自动调用您的类的 close 方法。
正如您在 FilterReader 类的代码中看到的,
public abstract class FilterReader extends Reader {
protected Reader in;
//......Other code, and then
public void close() throws IOException {
in.close();
}
}
如果你写
try(FileReader fr = new FileReader("filename")){
// your code
}
完成后JVM会自动关闭它
关于java - 关闭声明为实例变量的 IO 资源的推荐方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40603883/