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 生命结束时处理这个临时目录并删除它?

4

1 回答 1

4

第一的:

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

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

关于你的真正问题:

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

于 2011-02-18T10:00:38.247 回答