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 .