Как создать временный файл в Java

В некоторых случаях вам может понадобиться создать временный файл в Java. Это может быть в случае тестов модулей, когда нет необходимости сохранять результаты.

В этой статье вы научитесь способам создания временных файлов в Java. Есть два статических метода с названием createTempFile в классе Java File, один из них требует два аргумента а другой - три. Это поможет создать временный файл в местоположении по умолчанию временного каталога, а также используется для создания временного файла в указанном месте.

1. Используйте метод File.createTempFile(String prefix, String suffix)

Formal Syntax

public static File createTempFile(String prefix,
                  String suffix)
                           throws IOException

Это легкий способ создания временного файла в временном каталоге операционной системы.

Этот метод создает пустой файл в каталоге по умолчанию для временного файла, используя указанный префикс и суффикс для создания названия этого файла. Использование этого метода эквивалентно к использованию createTempFile(prefix, suffix, null).

Он возвращает абстрактный путь, который указывает на только что созданный пустой файл.

Данный метод имеет следующие параметры:

  • prefix - используется для создания названия файла и может иметь как минимум три символа.
  • suffix -используется для создания названия файла и может быть null, в случае которого будет использован суффикс ".tmp". /li>

Пример

import java.io.File;
import java.io.IOException;
 
public class JavaTempFile {
 
	public static void main(String[] args) {
		try {
			File tmpFile = File.createTempFile("data", null);
			File newFile = File.createTempFile("text", ".temp", new File("/Users/name/temp"));
			System.out.println(tmpFile.getCanonicalPath());
			System.out.println(newFile.getCanonicalPath());
			// запишите данные в временный файл подобно обычному файлу  
			// удалите при завершении программы 
			tmpFile.deleteOnExit();
			newFile.deleteOnExit();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
 
}

Результат будет иметь следующий вид:

Результат

/private/var/folders/1t/sx2jbcl534z88byy78_36ykr0000gn/T/data225458400489752329.tmp
/Users/name/temp/text2548249124983543974.temp
Временный файл не будет удален после того, как Java программа завершила работу, если вы не создали второй временный Java файл, вызывающий метод deleteOnExit класса Java File. Этот аргумент влияет на то, как будет работать ваш временный файл Java.

2. Используйте метод File.createTempFile(String prefix, String suffix, File directory)

Формальный синтаксис

public static File createTempFile(String prefix,
                  String suffix,
                  File directory)
                           throws IOException

Этот метод создает пустой файл в указанном временном каталоге, используя предоставленный префикс и суффикс для создания названия.

Аргумент префикса должен иметь как минимум три символа. Рекомендуется использовать короткий префикс и значащую строку, например, "ffn" or "mail". Аргумент суффикса может быть null, в случае которого будет использован суффикс ".tmp".

Для создания нового файла префикс и суффикс сначала должны быть установлены так, чтобы они соответствовали ограничениям базовой платформы. Если префикс слишком длинный, он будет срезан, но первые три символа всегда сохраняются. Если суффикс слишком длинный он также будет срезан, но если он начинается точкой ('.'), точка и первые три символа после нее всегда сохраняются. Когда эти регулирования готовы, будет создано название нового файла с помощью объединения префикса, пяти или более символов и суффикса.

Данный метод имеет следующие параметры:

  • Префикс (prefix) - The prefix string to be used in generating the file's name; must be at least three characters long.
  • Суффикс (suffix) - The suffix string to be used in generating the file's name; may be null, in which case the suffix ".tmp" will be used.
  • Каталог (directory) - The directory in which the file is to be created, or null if the default temporary-file directory is to be used.

Этот метод возвращает абстрактный путь, который указывает на недавно созданный пустой файл. Он вызывает IOException, если файл не может быть создан,IllegalArgumentException, если аргумент префикса содержит меньше трех символов и SecurityException, если есть диспетчер безопасности, и его метод java.lang.SecurityManager.checkWrite(java.lang.String) не позволяет создать файл.1

А теперь увидим этот метод в работе:

Пример

import java.io.File;
import java.io.IOException;
 
public class TempFileExample {
 
   public static void main(String[] args) {
       try {
 
           File tempFile = File.createTempFile("hello", ".tmp");
           System.out.println("Temp file On Default Location: " + tempFile.getAbsolutePath());
           tempFile = File.createTempFile("hello", ".tmp", new File("C:/"));
           System.out.println("Temp file On Specified Location: " + tempFile.getAbsolutePath());
 
       } catch (IOException e) {
           e.printStackTrace();
       }
   }

Результат будет иметь следующий вид:

Резульат

Temp file On Default Location: C:\Users\swami\AppData\Local\Temp\hello7828748332363277400.tmp
Temp file On Specified Location: C:\hello950036450024130433.tmp
В случае тестов модулей, используемых JUnit, можете также использовать TemporaryFolder. TemporaryFolder Rule позволяет создать файлы и папки, которые должны быть удалены при завершении тестового метода независимо от его результата.

В заключении здесь увидите некоторые заметки относительно временных файлов класса Java File:

  • Перейдите к методу deleteOnExit() с помощью метода createTempFile() с версией трех аргументов, чтобы автоматически избавиться от временных файлов.
  • Если говорить о deleteOnExit(), Javadoc предоставляет информацию, что удаление будет предпринято при нормальном завершении виртуальной машины, как указано в спецификации языка Java