java - 关闭声明为实例变量的 IO 资源的推荐方法是什么

标签 java java-io finalize

在一些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/

相关文章:

java - RandomAccessFile 中的结束行 StringBuilder

c# - 在 C# 中完成方法指南和最佳实践

java - 完成数组的第一个元素

java - 在 setter/getter 中创建新对象,确保它不位于虚拟机中

java - Mockito自调用doAnswer重复调用?

java - 使用 Oracle 和 PostgreSQL 的长文本列 hibernate

java - 如何再次提示用户输入有效值?

java - 如何映射表的类(@ManyToMany)之间的关系

java.io.FileNotFoundException : read. txt (系统找不到指定的文件)`

Java:如何按文件名而不是扩展名过滤传入文件?