删除临时目录

tom*_*tom 1 java servlets temporary-directory

我在这里找到了一些用于在 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;
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能在 servlet 生命周期结束时处理这个临时目录并删除它?

Joa*_*uer 5

第一的:

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

一个常见的陷阱是调用createTempFile、删除文件并在其位置创建一个目录,但这会导致竞争条件,可被利用来创建安全漏洞,特别是当要将可执行文件写入目录时。

关于你真正的问题:

您需要手动删除该目录,这意味着您需要跟踪您创建的所有目录(例如在 a 中Collection<File>),并在您确定不再需要它们时将其删除。