2011-02-18 151 views
1

我在这里发现了一些用于在Java中创建临时目录的代码。删除临时目录

public static File createTempDirectory() throws IOException 
{ 
    final File temp; 
    temp = File.createTempFile("temp", Long.toString(System.nanoTime())); 

    if(!(temp.delete())) 
    { 
     throw new IOException("Could not delete temp file: " + temp.getAbsolutePath()); 
    } 
    if(!(temp.mkdir())) 
    { 
     throw new IOException("Could not create temp directory: " + temp.getAbsolutePath()); 
    } 
    return temp; 
} 

如何在我的servlet的生命结束时处理这个临时目录并删除它?

+0

如何保持对它的静态引用? – Matten 2011-02-18 09:57:25

回答

4

第一:

不要使用创建一个临时目录中的这个方法! 这是不安全的!改为使用Guava方法Files.createTempDir()(或者如果您不想使用Guava,请手动重新实施)。究其原因,在其JavaDoc中描述:

一个常见的错误是调用createTempFile,删除该文件并创建它的位置的目录,但是这将导致其可以被利用来创造安全漏洞的竞争条件,特别是当可执行文件将被写入目录中。

关于你的真正问题:

您需要手动删除该目录,这意味着你需要跟踪你创建(例如在Collection<File>)所有的目录,并删除它们时,你肯定知道他们不再需要。