尽管关闭了写入文件的流,deleteOnExit 仍未删除文件
deleteOnExit not deleting file despite closing of stream writing to it
相关代码:
File tempFile = File.createTempFile("", "");
tempFile.deleteOnExit();
FileOutputStream out = new FileOutputStream(tempFile);
byte[] bytes = IOUtils.toByteArray(inputStream);
out.write(bytes);
out.close();
我通过 IntelliJ 运行将其作为本地 tomcat 服务器 运行 配置,并且在退出服务器时,它不会清理临时文件。关于我可能遗漏的任何想法?
File.deleteOnExit()
在当前 VM 上安装一个关闭挂钩,因此只有当 VM 执行正常的受控关闭时才会触发您的删除。
对于 TOMCAT,将通过 TOMCAT 安装中的 bin\shutdown.bat
或 bin/shutdown.sh
脚本。
但是,如果您的 TOMCAT 服务器可能 运行 非常 很长一段时间,您应该避免调用 File.deleteOnExit()
作为要删除的文件存储在一个列表中,该列表可能(最终)增长到巨大的大小并导致 OutOfMemoryError。
这对于频繁重新启动的 Tomcat 实例来说不是问题,但对于大容量应用程序服务器来说将是一个问题。如果需要这种不同的方法,则更可靠地跟踪准备在 try...finally 中删除的临时文件:
File temp = null;
try {
...
temp = File.createTempFile("", "") ...
...
} finally {
deleteOnExit(temp);
}
private static void deleteOnExit(File fileToDelete)
{
if (fileToDelete != null)
fileToDelete.delete();
}
相关代码:
File tempFile = File.createTempFile("", "");
tempFile.deleteOnExit();
FileOutputStream out = new FileOutputStream(tempFile);
byte[] bytes = IOUtils.toByteArray(inputStream);
out.write(bytes);
out.close();
我通过 IntelliJ 运行将其作为本地 tomcat 服务器 运行 配置,并且在退出服务器时,它不会清理临时文件。关于我可能遗漏的任何想法?
File.deleteOnExit()
在当前 VM 上安装一个关闭挂钩,因此只有当 VM 执行正常的受控关闭时才会触发您的删除。
对于 TOMCAT,将通过 TOMCAT 安装中的 bin\shutdown.bat
或 bin/shutdown.sh
脚本。
但是,如果您的 TOMCAT 服务器可能 运行 非常 很长一段时间,您应该避免调用 File.deleteOnExit()
作为要删除的文件存储在一个列表中,该列表可能(最终)增长到巨大的大小并导致 OutOfMemoryError。
这对于频繁重新启动的 Tomcat 实例来说不是问题,但对于大容量应用程序服务器来说将是一个问题。如果需要这种不同的方法,则更可靠地跟踪准备在 try...finally 中删除的临时文件:
File temp = null;
try {
...
temp = File.createTempFile("", "") ...
...
} finally {
deleteOnExit(temp);
}
private static void deleteOnExit(File fileToDelete)
{
if (fileToDelete != null)
fileToDelete.delete();
}