关闭时是否存在现有FileInputStream删除?


问题内容

有没有一种现有方法可以FileInputStream在关闭后自动删除基础文件?

我打算自己创建实用程序类以进行扩展FileInputStream并自己完成,但我有点惊讶的是还没有任何东西。

编辑: 用例是我有一个Struts
2动作,该动作InputStream从页面返回文件下载。据我所知,当操作完成或FileInputStream不再使用时,我不会收到通知,并且我不希望生成的(可能很大的)临时文件被下载。

这个问题不是特定于Struts 2的,因此我最初没有包含该信息并使问题复杂化。


问题答案:

标准库中没有这样的东西,也没有任何apache-commons库,所以类似:

public class DeleteOnCloseFileInputStream extends FileInputStream {
   private File file;
   public DeleteOnCloseFileInputStream(String fileName) throws FileNotFoundException{
      this(new File(fileName));
   }
   public DeleteOnCloseFileInputStream(File file) throws FileNotFoundException{
      super(file);
      this.file = file;
   }

   public void close() throws IOException {
       try {
          super.close();
       } finally {
          if(file != null) {
             file.delete();
             file = null;
         }
       }
   }
}