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


創建臨時文件

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

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

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());
      } catch (IOException e)
      {
         e.printStackTrace();
      }
   }
}

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

通過使用NIO創建臨時文件

public class TemporaryFileExample
{
   public static void main(String[] args)
   {
      try
      {
         final Path 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

寫入臨時文件

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

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

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
 
public class TemporaryFileExample
{
   public static void main(String[] args)
   {
      File temp;
      try
      {
         temp = File.createTempFile("myTempFile", ".txt");
 
         BufferedWriter bw = new BufferedWriter(new FileWriter(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();
      }
   }
}

使用NIO寫入臨時文件

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

public class TemporaryFileExample
{
   public static void main(String[] args)
   {
      try
      {
         final Path 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();

使用IO刪除臨時文件

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(); //立即刪除
          
         temp.deleteOnExit(); //運行結束時刪除
          
         System.out.println("Temp file exists : " + temp.exists());
      } catch (IOException e)
      {
         e.printStackTrace();
      }
   }
}

使用NIO刪除臨時文件

public class TemporaryFileExample
{
   public static void main(String[] args)
   {
      try
      {
         final Path path = Files.createTempFile("myTempFile", ".txt");
         System.out.println("Temp file : " + path);
 
        // Files.delete(path);  //立即刪除文件
        
        Files.deleteIfExists(path);
          
         
          
      } catch (IOException e)
      {
         e.printStackTrace();
      }
   }
}

但是在進行刪除和創建文件的時候我使用的是hutool工具類中的fileUtil這個工具類

ls 列出目錄和文件
touch 創建文件,如果父目錄不存在也自動創建
mkdir 創建目錄,會遞歸創建每層目錄
del 刪除文件或目錄(遞歸刪除,不判斷是否為空),這個方法相當於Linux的delete命令
copy 拷貝文件或目錄
需要注意的是,del方法會刪除目錄而不判斷其是否為空,這一方面方便了使用,另一方面也可能造成一些預想不到的后果(比如拼寫錯路徑而刪除不應該刪除的目錄),所以請謹慎使用此方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM