Sha*_* D. 21 java file-io temporary-files
是否存在FileInputStream
关闭时自动删除基础文件的现有方法?
我打算让自己的实用程序类扩展FileInputStream
并自己完成,但我有点惊讶的是没有已经存在的东西.
编辑:用例是我有一个Struts 2动作,它返回InputStream
一个页面的文件下载.据我所知,当动作完成或者FileInputStream
不再使用时我没有得到通知,我不希望生成的(可能很大的)临时文件被遗留下来.
问题不是Struts 2特定的,所以我最初没有包含该信息并使问题复杂化.
nos*_*nos 28
标准库中没有这样的东西,也没有任何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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 12
我知道这是一个相当老的问题。但是,这是Google的首批成果之一,而Java 7+内置了以下功能:
Path path = Paths.get(filePath);
InputStream fileStream = Files.newInputStream(path, StandardOpenOption.DELETE_ON_CLOSE);
Run Code Online (Sandbox Code Playgroud)
这种方法虽然有一些警告,但已在此处写下,但要点是,实现将尽最大努力尝试在关闭输入流时删除文件,如果失败,则尝试进行另一种尽力尝试。 JVM终止。它旨在与仅由JVM的单个实例使用的临时文件一起使用。如果应用程序对安全性敏感,那么还会有一些其他警告。
你可以在打开文件之前使用File.deleteOnExit()吗?
编辑:在你可以子类化FileInputStream将删除'close()'上的文件;
class MyFileInputStream extends FileInputStream
{
File file;
MyFileInputStream(File file) { super(file); this.file=file;}
public void close() { super.close(); file.delete();}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17811 次 |
最近记录: |