在java中删除临时文件

wljmcqd8  于 2023-05-12  发布在  Java
关注(0)|答案(5)|浏览(572)

我正在Java中创建一个临时文件,但无法删除它。这是我写的代码:

temp = File.createTempFile("temp", ".txt");
temp.deleteOnExit();
fileoutput = new FileWriter(temp);
buffout = new BufferedWriter(fileoutput);
kulphzqa

kulphzqa1#

添加以下代码(在对文件执行操作之后):

buffout.close();
fileoutput.close();
temp.delete();

只要文件上的某个流处于打开状态,它就会被锁定(至少在JVM的Windows实现上是这样)。所以不能删除。
最好始终检查所有打开的流是否在使用后再次关闭,因为这是一种糟糕的内存泄漏情况。您的应用程序甚至可以吃掉所有可用的文件句柄,这可能导致系统无法使用。

idv4meu8

idv4meu82#

有一个bug说,如果文件被filewriter或其他东西打开,它不会被删除。在Windows上。检查是否关闭了文件编写器。
另一种解决方法是安装一个ShutdownHook,它将手动删除该文件。

bxpogfeg

bxpogfeg3#

为了让deleteOnExit正常工作,您必须 * 干净地 * 关闭VM(我怀疑)。在UNIX上,kill将是一个干净的关闭(即将处理ShutdownHooks),而kill -9将更像是 * 强制退出 *。
deleteOnExit绝对适合我!

pkln4tw6

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();
   }

}
fwzugrvs

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()方法

相关问题