Java當中如何優雅地處理臨時文件?

一、背景

最近接手了同事的代碼,發現他是這樣處理excel文件的:

1、將文件保存到一個事先定義好的目錄;如果目錄不存在則新建

2、使用excel處理工具根據文件路徑讀取文件內容之後處理業務邏輯

3、編寫一個定時任務每天凌晨1點刪除該目錄內的.xlsx文件複製代碼

這樣雖然可以達到效果,但實在是繁瑣至極,非常不優雅。其實jdk中就提供了處理臨時文件(Temporary File)的方法,現在讓我們來看一看。

二、創建臨時文件

在java中創建臨時文件有許多場景,但是大多數是在單元測試或者是對上傳的文件進行內容處理。當測試用例或者文件處理完成後,你並不關心文件是否還存在。況且持續累積的無效文件無疑會浪費許多磁盤空間。

1、通過使用java.io.File.createTempFile()創建臨時文件

publicclassTemporaryFileExample{publicstaticvoidmain(String[] args){   

   File temp;try{      

  temp = File.createTempFile("myTempFile",".txt");             

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

  }catch(IOException e)      {       

 e.printStackTrace();     

 }  

 }

}

windows系統中的輸出: C:\Users\admin\AppData\Local\Temp\myTempFile7295261447112135643.txt

2、通過使用NIO創建臨時文件

publicclassTemporaryFileExample{publicstaticvoidmain(String[] args){

try{

finalPath path = Files.createTempFile("myTempFile",".txt");       

 System.out.println("Temp file : "+ path);                

}catch(IOException e)      {        

 e.printStackTrace();      

 }

}

windows系統中的輸出: C:\Users\admin\AppData\Local\Temp\myTempFile3492283537103788196.txt

三、寫入臨時文件

比如在文件上傳的時候,我們就可以將字節流寫入臨時文件當中。

1、使用java.io.BufferedWriter寫入臨時文件

importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;publicclassTemporaryFileExample{

publicstaticvoidmain(String[] args){     

 File temp;try{       

 temp = File.createTempFile("myTempFile",".txt");         

 BufferedWriter bw =newBufferedWriter(newFileWriter(temp));       

 bw.write("This is the temporary data written to temp file");      

  bw.close();         

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

 }catch(IOException e)      {      

  e.printStackTrace();      } 

 }

}

2、使用NIO寫入臨時文件

如果你要使用java NIO庫,你就可以使用Files.write()方法

publicclassTemporaryFileExample{

publicstaticvoidmain(String[] args){

try{

finalPath path = Files.createTempFile("myTempFile",".txt");        

System.out.println("Temp file : "+ path);byte[] buf ="some data".getBytes();       

 Files.write(path, buf);     

 }catch(IOException e)      {        

 e.printStackTrace();     

 }  

 }

}

四、刪除臨時文件

刪除臨時文件是非常重要的一步,因爲你不想讓你的磁盤空間爆炸。 爲了當在應用exit時(jvm終止)刪除文件,你可以使用:

File temp = File.createTempFile("myTempFile",".txt");temp.deleteOnExit();

或者如果你想要立馬刪除文件,你可以直接使用delete()方法

File temp = File.createTempFile("myTempFile",".txt");temp.delete();

1、使用IO刪除臨時文件

importjava.io.File;importjava.io.IOException;publicclassTemporaryFileExample{publicstaticvoidmain(String[] args){      

File temp;try{        

 temp = File.createTempFile("myTempFile",".txt");                  

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

//temp.delete();

 //立即刪除temp.deleteOnExit();

//運行結束時刪除System.out.println("Temp file exists : "+ temp.exists());    

  }catch(IOException e)      {       

 e.printStackTrace();   

   } 

 }

}

2、使用NIO刪除臨時文件

publicclassTemporaryFileExample{

publicstaticvoidmain(String[] args){

try{

finalPath path = Files.createTempFile("myTempFile",".txt");       

 System.out.println("Temp file : "+ path);

// Files.delete(path); 

 //立即刪除文件Files.deleteIfExists(path);                                 

 }catch(IOException e)      {      

  e.printStackTrace();     

 }  

 }

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章