簡體   English   中英

刪除java中的臨時文件

[英]delete temporary file in java

我在java中創建臨時文件,但我無法刪除它。 這是我寫的代碼:

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

添加以下代碼(在完成對文件的操作后):

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

只要文件上的某些流是打開的,它就會被鎖定(至少在JVM的Windows實現上)。 所以它無法刪除。

最好在使用后檢查所有打開的流是否再次關閉,因為這是一個糟糕的內存泄漏情況。 您的應用程序甚至可能會占用所有可用的文件句柄,從而導致系統無法使用。

有一個錯誤說如果文件由文件編寫者或任何東西打開,它將不會被刪除。 在窗戶上。 檢查您是否關閉文件編寫者。

另一種解決方法是安裝ShutdownHook ,手動刪除文件。

您必須干凈地關閉VM才能使deleteOnExit正常工作(我懷疑)。 UNIXkill將是一個干凈的關閉(即ShutdownHooks將被處理),而kill -9更像是一個強制退出

deleteOnExit絕對適合我!

用於關閉inpustream和outputstream的代碼:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM