Научитесь создавать новые файлы, используя различные методы, включая 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));