删除临时目录

发布于 2024-10-18 01:15:51 字数 538 浏览 10 评论 0原文

我在这里找到了一些用于在 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 生命周期结束时,如何处理这个临时目录并将其删除?

I found some code on here for creating temporary directories in 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;
}

How can I at the end of my servlet's life a handle on this temporary directory and delete it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

池木 2024-10-25 01:15:51

第一:

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

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

关于您真正的问题:

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

First:

Don't use this method of creating a temporary directory! It is unsafe! Use the Guava method Files.createTempDir() instead (or re-implement it manually, if you don't want to use Guava). The reason is described in its JavaDoc:

A common pitfall is to call createTempFile, delete the file and create a directory in its place, but this leads a race condition which can be exploited to create security vulnerabilities, especially when executable files are to be written into the directory.

Regarding your real question:

You need to delete the directory manually, which means you need to keep track of all directories you create (for example in a Collection<File>) and delete them when you know for sure that they are not longer needed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文