我正在Java中创建一个临时文件,但无法删除它。这是我写的代码:
temp = File.createTempFile("temp", ".txt"); temp.deleteOnExit(); fileoutput = new FileWriter(temp); buffout = new BufferedWriter(fileoutput);
kulphzqa1#
添加以下代码(在对文件执行操作之后):
buffout.close(); fileoutput.close(); temp.delete();
只要文件上的某个流处于打开状态,它就会被锁定(至少在JVM的Windows实现上是这样)。所以不能删除。最好始终检查所有打开的流是否在使用后再次关闭,因为这是一种糟糕的内存泄漏情况。您的应用程序甚至可以吃掉所有可用的文件句柄,这可能导致系统无法使用。
idv4meu82#
有一个bug说,如果文件被filewriter或其他东西打开,它不会被删除。在Windows上。检查是否关闭了文件编写器。另一种解决方法是安装一个ShutdownHook,它将手动删除该文件。
bxpogfeg3#
为了让deleteOnExit正常工作,您必须 * 干净地 * 关闭VM(我怀疑)。在UNIX上,kill将是一个干净的关闭(即将处理ShutdownHooks),而kill -9将更像是 * 强制退出 *。deleteOnExit绝对适合我!
deleteOnExit
UNIX
kill
ShutdownHooks
kill -9
pkln4tw64#
关闭输入流和输出流的代码:
FileInputStream in = new FileInputStream(); ArrayList list_in = new ArrayList<FileInputStream>(); list_in.add(in); FileOutputStream out = new FileOutputStream(); ArrayList list_out = new ArrayList<OutputputStream>(); list_in.add(out); public do_before_exit() { for(int i=0;i<list_in.size();i++) { FileInputStream in=(FileInputStream)list_in.get(i) FileInputStream out=(FileInputStream)list_out.get(i) in.close() out.close(); } }
fwzugrvs5#
要在Java中删除临时文件,可以使用java.io.File类,该类提供了几种操作文件和目录的方法。下面是一个示例代码片段,演示了如何在Java中创建和删除临时文件:
import java.io.File; import java.io.IOException; public class TempFileExample { public static void main(String[] args) { try { // Create a temporary file File tempFile = File.createTempFile("temp", ".txt"); // Print the path of the temporary file System.out.println("Temporary file created: " + tempFile.getAbsolutePath()); // Delete the temporary file tempFile.delete(); // Print a message indicating that the file has been deleted System.out.println("Temporary file deleted."); } catch (IOException e) { e.printStackTrace(); } } }
在本例中,使用File.createTempFile()方法创建一个带有指定前缀和后缀的临时文件。生成的File对象表示临时文件。File类的getAbsolutePath()方法用于将临时文件的路径打印到控制台。File类的delete()方法用于删除临时文件。此方法返回一个布尔值,该值指示文件是否已成功删除。请注意,当Java虚拟机(JVM)终止时,临时文件将自动删除,但最好在使用完该文件后立即手动删除该文件。如果需要删除临时目录及其所有内容,可以使用deleteRecursively()方法
5条答案
按热度按时间kulphzqa1#
添加以下代码(在对文件执行操作之后):
只要文件上的某个流处于打开状态,它就会被锁定(至少在JVM的Windows实现上是这样)。所以不能删除。
最好始终检查所有打开的流是否在使用后再次关闭,因为这是一种糟糕的内存泄漏情况。您的应用程序甚至可以吃掉所有可用的文件句柄,这可能导致系统无法使用。
idv4meu82#
有一个bug说,如果文件被filewriter或其他东西打开,它不会被删除。在Windows上。检查是否关闭了文件编写器。
另一种解决方法是安装一个ShutdownHook,它将手动删除该文件。
bxpogfeg3#
为了让
deleteOnExit
正常工作,您必须 * 干净地 * 关闭VM(我怀疑)。在UNIX
上,kill
将是一个干净的关闭(即将处理ShutdownHooks
),而kill -9
将更像是 * 强制退出 *。deleteOnExit
绝对适合我!pkln4tw64#
关闭输入流和输出流的代码:
fwzugrvs5#
要在Java中删除临时文件,可以使用java.io.File类,该类提供了几种操作文件和目录的方法。
下面是一个示例代码片段,演示了如何在Java中创建和删除临时文件:
在本例中,使用File.createTempFile()方法创建一个带有指定前缀和后缀的临时文件。生成的File对象表示临时文件。
File类的getAbsolutePath()方法用于将临时文件的路径打印到控制台。
File类的delete()方法用于删除临时文件。此方法返回一个布尔值,该值指示文件是否已成功删除。
请注意,当Java虚拟机(JVM)终止时,临时文件将自动删除,但最好在使用完该文件后立即手动删除该文件。
如果需要删除临时目录及其所有内容,可以使用deleteRecursively()方法