删除java中的临时文件

时间:2009-06-22 10:36:20

标签: java file-io core

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

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

5 个答案:

答案 0 :(得分:23)

添加以下代码(使用该文件完成操作后):

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

只要文件上的某些流打开,它就会被锁定(至少在JVM的Windows实现上)。因此无法删除。

最好总是检查所有打开的流是否在使用后再次关闭,因为这是一个糟糕的内存泄漏情况。您的应用程序甚至可能会占用所有可用的文件句柄,从而导致系统无法使用。

答案 1 :(得分:3)

有一个bug说如果文件是由文件编写者打开的,那么它就不会被删除。在窗户上。检查您是否关闭文件编写者。

另一种解决方法是安装ShutdownHook手动删除文件。

答案 2 :(得分:0)

您必须干净地关闭VM 才能使deleteOnExit正常工作(我怀疑)。在UNIXkill将是一个干净的关闭(即ShutdownHooks将被处理)而kill -9更像是强制退出

deleteOnExit绝对适合我!

答案 3 :(得分:0)

关闭输入流和输出流的代码:

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

}

答案 4 :(得分:-1)

import java.io.File;
import java.io.IOException;

public class TemporaryFileExample
{
   public static void main(String[] args)
   {
      File temp;
      try
      {
         temp = File.createTempFile("myTempFile", ".txt");

         System.out.println("Temp file created : " + temp.getAbsolutePath());

         //temp.delete(); //For deleting immediately

         temp.deleteOnExit(); //Delete on runtime exit

         System.out.println("Temp file exists : " + temp.exists());
      } catch (IOException e)
      {
         e.printStackTrace();
      }
   }
}