Создание файла в Java очень часто применяемая операция. В данной статье будут рассмотрены несколько методов создания файла в Java.
File.createNewFile()
java.io.File — класс который может использоваться для создания файла в Java. Когда мы инициализируем новый файловый объект, мы предоставляем этому объекту имя файла и после этого мы можем вызвать метод createNewFile() для создания файла.
Если файл создан успешно, то метод createNewFile() возвращает true, если файл уже существует, то метод вернёт значение false. Данный метод также может выбросить исключение java.io.IOException, когда невозможно создать файл. Файл создаётся пустым и имеет размер ноль байт.
При создании файла можно использовать как относительный(relative path) так и абсолютный(absolute path) путь или указать только имя файла.
При использовании относительного пути, файл будет создан в корневой директории проекта. А если запустить программу при помощи командной строки, то Java попытается создать файл в текущей директории.
Для достижения кроссплатформенности, в коде примера будет использован системный параметр file.separator.
Далее приведён простой пример программы по созданию файла на Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
package tech.elekt.files; import java.io.File; import java.io.IOException; public class CreateNewFile { public static void main(String[] args) throws IOException { String fileSeparator = System.getProperty("file.separator"); //Указываем имя файла и абсолютный путь String absoluteFilePath = fileSeparator+"Users"+fileSeparator+"Elekt"+fileSeparator+"file.txt"; File file = new File(absoluteFilePath); if(file.createNewFile()){ System.out.println(absoluteFilePath+" Файл успешно создан"); }else System.out.println("Файл "+absoluteFilePath+" уже существует"); //Указываем только имя файла file = new File("file.txt"); if(file.createNewFile()){ System.out.println("file.txt Файл был создан в корневой директории проекта"); }else System.out.println("Файл file.txt уже существует в корневой директории проекта"); //Имя файла и относительный путь String relativePath = "tmp"+fileSeparator+"file.txt"; file = new File(relativePath); if(file.createNewFile()){ System.out.println(relativePath+" Файл был успешно создан по указанному пути"); }else System.out.println("По указанному пути, Файл "+relativePath+" уже существует"); } } |
Когда мы запустим программу, в процессе выполнения мы увидим следующее:
1 2 3 4 5 6 7 |
Файл /Users/Elekt/file.txt успешно создан file.txt Файл был создан в корневой директории проекта Exception in thread "main" java.io.IOException: No such file or directory at java.io.UnixFileSystem.createFileExclusively(Native Method) at java.io.File.createNewFile(File.java:947) at tech.elekt.files.CreateNewFile.main(CreateNewFile.java:32) |
При попытке создать файл по относительному пути(relative path) было выброшено исключение: IOException, так как папка tmp не существует в корневой директории проекта.
Метод createNewFile() только создаёт пустой файл, но если по указанному пути директория отсутствует то будет выброшено исключение IOException, как для относительного пути(relative path), так и для абсолютного пути(absolute path).
Теперь в корневой директории проекта была создана папка tmp. Результат выполнения программы после повторного запуска:
1 2 3 |
Файл /Users/Elekt/file.txt Файл уже существует! Файл file.txt уже существует в корневой директории проекта Файл tmp/file.txt Файл был создан в корневой директории проекта |
По скольку первые два файла уже были созданы ранее то метод createNewFile() вернул false, а для третьего файла true
После третьего запуска — результат выполнения будет следующий:
1 2 3 |
Файл /Users/Elekt/file.txt Файл уже существует Файл file.txt уже существует в корневой директории проекта Файл tmp/file.txt уже существует в корневой директории проекта |
FileOutputStream.write(byte[] b)
Если необходимо создать файл и записать туда данные, то можно воспользоваться методом для записи потока в файл, как на примере далее:
1 2 3 4 5 |
String fileData = "Elekt.tech - Java"; FileOutputStream fos = new FileOutputStream("name.txt"); fos.write(fileData.getBytes()); fos.flush(); fos.close(); |
Java NIO Files.write()
Так же для создания и записи в файл можно воспользоваться функцией Write() из библиотеки NIO, как на примере далее:
1 2 |
String fileData = "Elekt.tech - Java"; Files.write(Paths.get("name.txt"), fileData.getBytes()); |