Перейти к основному содержимому

Java — создать файл

· 3 мин. чтения

1. Обзор

В этом кратком руководстве мы узнаем, как создать новый файл в Java — сначала используя классы Files и Path из NIO, затем классы Java File и FileOutputStream , Google Guava и, наконец, библиотеку Apache Commons IO .

Эта статья является частью серии «Java — Back to Basic» здесь, на ForEach.

2. Настройка

В примерах мы определим константу для имени файла:

private final String FILE_NAME = "src/test/resources/fileToCreate.txt";

И мы также добавим шаг очистки, чтобы убедиться, что файл еще не существует перед каждым тестом, и удалить его после каждого запуска теста:

@AfterEach
@BeforeEach
public void cleanUpFiles() {
File targetFile = new File(FILE_NAME);
targetFile.delete();
}

3. Использование NIO Files.createFile()

Начнем с использования метода Files.createFile() из пакета Java NIO:

@Test
public void givenUsingNio_whenCreatingFile_thenCorrect() throws IOException {
Path newFilePath = Paths.get(FILE_NAME);
Files.createFile(newFilePath);
}

Как видите, код по-прежнему очень прост; теперь мы используем новый интерфейс Path вместо старого File .

Здесь следует отметить, что новый API хорошо использует исключения. Если файл уже существует, нам больше не нужно проверять код возврата. Вместо этого мы получим FileAlreadyExistsException :

java.nio.file.FileAlreadyExistsException: <code class="language-java">src/test/resources/fileToCreate.txt

в sun.nfWindowsException.translateToIOException(WindowsException.java:81)

4. Использование File.createNewFile()

Давайте теперь посмотрим, как мы можем сделать то же самое, используя класс java.io.File :

@Test
public void givenUsingFile_whenCreatingFile_thenCorrect() throws IOException {
File newFile = new File(FILE_NAME);
boolean success = newFile.createNewFile();
assertTrue(success);
}

Обратите внимание, что для успешного выполнения этой операции файл не должен существовать. Если файл существует, то операция createNewFile() вернет false.

5. Использование FileOutputStream

Другой способ создать новый файл — использовать java.io.FileOutputStream :

@Test
public void givenUsingFileOutputStream_whenCreatingFile_thenCorrect() throws IOException {
try(FileOutputStream fileOutputStream = new FileOutputStream(FILE_NAME)){
}
}

В этом случае новый файл создается при создании экземпляра объекта FileOutputStream . Если файл с таким именем уже существует, он будет перезаписан . Однако, если существующий файл является каталогом или новый файл не может быть создан по какой-либо причине, мы получим исключение FileNotFoundException .

Кроме того, обратите внимание, что мы использовали оператор try-with-resources , чтобы убедиться, что поток правильно закрыт.

6. Использование гуавы

Решение Guava для создания нового файла также является быстрым однострочным:

@Test
public void givenUsingGuava_whenCreatingFile_thenCorrect() throws IOException {
com.google.common.io.Files.touch(new File(FILE_NAME));
}

7. Использование Apache Commons IO

Библиотека Apache Commons предоставляет метод FileUtils.touch() , который реализует то же поведение, что и утилита « touch » в Linux.

Поэтому он создает новый пустой файл или даже файл и полный путь к нему в файловой системе:

@Test
public void givenUsingCommonsIo_whenCreatingFile_thenCorrect() throws IOException {
FileUtils.touch(new File(FILE_NAME));
}

Обратите внимание, что это ведет себя немного иначе, чем в предыдущих примерах: если файл уже существует, операция не завершается ошибкой, она просто ничего не делает.

Вот и все — 4 быстрых способа создать новый файл в Java.

8. Заключение

В этой статье мы рассмотрели разные решения для создания файла в Java. Мы использовали классы, входящие в состав JDK и внешних библиотек.

Код примеров доступен на GitHub .