«1. Обзор

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

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

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 at sun.n.f.WindowsException.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

Решение 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.