Как работать с временными файлами в Java, которые изящно

Java

задний план

Недавно я взял код коллеги и обнаружил, что он обрабатывает файлы Excel следующим образом:

1. 将文件保存到一个事先定义好的目录;如果目录不存在则新建
2. 使用excel处理工具根据文件路径读取文件内容之后处理业务逻辑
3. 编写一个定时任务每天凌晨1点删除该目录内的.xlsx文件

Хотя этим можно добиться эффекта, это чрезвычайно громоздко и очень неэлегантно. фактическиjdkобработка осуществляется вВременные файлы(Временный файл), теперь давайте посмотрим.

Создать временные файлы

Существует много сценариев создания временных файлов в 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();
      }
   }
}

удалить временные файлы

Удаление временных файлов — очень важный шаг, потому что вы не хотите взорвать место на диске. Чтобы удалить файл при выходе из приложения (завершение 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();
      }
   }
}