3

我将应用程序中的几个临时文件输出到 tmp 目录,但想知道在关闭时删除它们是否是最佳实践,或者我是否应该期望主机操作系统为我处理这个?

我对 Java 很陌生,我可以处理删除,但希望使应用程序尽可能多操作系统和 Linux 友好。如果我不需要这样做,我会尽量减少文件删除。

这是我用来输出 tmp 文件的方法:

 try {
                java.io.InputStream iss = getClass().getResourceAsStream("/nullpdf.pdf");
                byte[] data = IOUtils.toByteArray(iss);
                iss.read(data);
                iss.close();
                String tempFile = "file";
                File temp = File.createTempFile(tempFile, ".pdf");
                FileOutputStream fos = new FileOutputStream(temp);
                fos.write(data);
                fos.flush();
                fos.close();
            nopathbrain = temp.getAbsolutePath();
            System.out.println(tempFile);
            System.out.println(nopathbrain);
            } catch (IOException ex) {
                ex.printStackTrace();
                System.out.println("TEMP FILE NOT CREATED - ERROR ");
            }
4

1 回答 1

5

createTempFile()仅创建一个具有唯一名称的新文件,但不将其标记为删除。在创建的文件上使用deleteOnExit()来实现这一点。然后,如果 JVM 正常关闭,则应删除临时文件。

编辑:在 java 中创建“真实”临时文件的示例:

File temp = File.createTempFile("temporary-", ".pdf");
temp.deleteOnExit();

这将在默认临时文件夹中创建一个具有唯一随机名称 ( temporary-{randomness}.pdf) 的文件,并在 JVM 退出时将其删除。

这对于具有中短运行时间的程序(例如脚本、简单的 GUI 应用程序)来说应该足够了。然后退出。如果程序运行时间更长或无限期地运行(服务器应用程序、监控客户端……)并且 JVM 不会退出,则此方法可能会用文件阻塞临时文件夹。在这种情况下,一旦不再需要临时文件,应用程序就应该删除它们(参见JDK7 中delete()Files帮助程序类)。

由于 Java 已经抽象出特定于操作系统的文件系统细节,因此这两种方法都与 Java 一样可移植。为了确保互操作性,请查看PathJava7 中文件名的新抽象。

于 2013-06-15T11:23:50.273 回答