Создание нового файла в Java

Научитесь создавать новые файлы, используя различные методы, включая NIO Path, IO File, OutputStream и библиотеки с открытым исходным кодом, такие как Guava и Apache Commons.

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

1. Создайте новый файл с помощью Java NIO

Files.createFile(path, attribs) — лучший способ создать новый, пустой и доступный для записи файл в Java, и он должен стать вашим предпочтительным подходом в будущем, если вы его еще не используете.

  • Метод createFile() принимает интерфейс Path вместо File. Он проверяет, существует ли уже файл, и затем создает его.
  • Проверка любого существующего файла и создание файла выполняется за одну атомарную операцию.
  • Атрибуты — необязательный список атрибутов файла, которые можно задать автоматически при создании файла.
  • Возвращает FileAlreadyExistsException, если файл с таким именем уже существует.
  • Он возвращает IOException, если происходит ошибка ввода-вывода или родительский каталог не существует.

Пример 1: Создание нового записываемого файла

 Строка TEXT_FILE = "C:/temp/io/textFile.txt";Путь textFilePath = Paths.get(TEXT_FILE);Файлы.createFile(textFilePath);

Пример 2: Создание нового файла, доступного только для чтения

Установите атрибуты файла при его создании. В данном примере мы устанавливаем доступ только для чтения(«r») для владельца, группы и других, используя строку «r–r–r–».

Строка TEXT_FILE = "C:/temp/io/textFile.txt";Установить разрешения PosixFilePermission = PosixFilePermissions.fromString("р--р--р--");FileAttribute<Set<PosixFilePermission>> атрибуты = PosixFilePermissions.asFileAttribute(разрешения);Путь textFilePath = Paths.get(TEXT_FILE);Files.createFile(textFilePath, attribs);

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

Используйте метод File.createNewFile() для создания нового файла, если и только если файл с таким именем еще не существует. Проверка любого существующего файла и создание файла — это атомарная операция.

Этот метод возвращает логическое значение –

  • true, если файл создан успешно.
  • false, если файл уже существует.
  • IOException Если произошла ошибка ввода-вывода.
 Строка TEXT_FILE = "C:/temp/io/textFile.txt";Файл текстовый_файл = новый Файл(TEXT_FILE);логическое значение isFileCreated = textFile.createNewFile();

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

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

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

String TEXT_FILE = "C:/temp/io/textFile.txt";try(FileOutputStream fos = new FileOutputStream(TEXT_FILE)){// We can write data as byte[]// fos.write(data, 0, data.length);}

4. Файлы Гуавы.touch()

Чтобы включить Guava, добавьте следующее в pom.xml.

 <зависимость><groupId>com.google.guava</groupId><artifactId>гуава</artifactId><версия>31.1-jre</версия></зависимость>

Метод Files.touch() похож на команду Unix touch. Он создает пустой файл или обновляет последнюю обновленную временную метку

Команда touch, используемая без каких-либо опций, создает пустой файл, предполагая, что файл не существует. Если файл существует, он изменяет временную метку.

 Строка TEXT_FILE = "C:/temp/io/textFile.txt";com.google.common.io.Files.touch(новый файл(TEXT_FILE));

5. FileUtils Apache Commons IO

Чтобы включить Apache Commons IO, добавьте следующее в pom.xml.

 <зависимость><groupId>commons-io</groupId><artifactId>commons-io</artifactId><версия>2.11.0</версия></зависимость>

FileUtils.touch() очень похож на предыдущий пример. Он также реализует то же поведение, что и утилита «touch» в Unix.

Также, начиная с версии 1.3, этот метод создает родительские каталоги, если они не существуют. Он выдает IOException, если дата последнего изменения файла не может быть установлена.

 Строка TEXT_FILE = "C:/temp/io/textFile.txt";org.apache.commons.io.FileUtils.touch(новый файл(TEXT_FILE)); 

Sourceocde на Github

Прокрутить вверх