1. Введение
В этом руководстве мы увидим, как мы используем Java для удаления содержимого файла без удаления самого файла. Поскольку есть много простых способов сделать это, давайте рассмотрим каждый по отдельности.
2. Использование PrintWriter
Класс PrintWriter языка
Java расширяет класс Writer
. Он печатает форматированное представление объектов в поток вывода текста.
Мы проведем простой тест. Давайте создадим экземпляр PrintWriter
, указывающий на существующий файл, удалив существующее содержимое файла, просто закрыв его, а затем убедимся, что длина файла пуста:
new PrintWriter(FILE_PATH).close();
assertEquals(0, StreamUtils.getStringFromInputStream(new FileInputStream(FILE_PATH)).length());
Также обратите внимание, что если нам не нужен объект PrintWriter
для дальнейшей обработки, это лучший вариант. Однако, если нам нужен объект PrintWriter
для дальнейших файловых операций, мы можем сделать это по-другому:
PrintWriter writer = new PrintWriter(FILE_PATH);
writer.print("");
// other operations
writer.close();
3. Использование FileWriter
FileWriter
Java — это стандартный класс Java IO API, который предоставляет методы для записи символьных данных в файл.
Давайте теперь посмотрим, как мы можем сделать ту же операцию, используя FileWriter:
new FileWriter(FILE_PATH, false).close();
Точно так же, если нам нужен объект FileWriter
для дальнейшей обработки, мы можем присвоить его переменной и обновить с помощью пустой строки.
4. Использование FileOutputStream
FileOutputStream
Java — это выходной поток, используемый для записи байтовых данных в файл.
Теперь давайте удалим содержимое файла с помощью FileOutputStream:
new FileOutputStream(FILE_PATH).close();
5. Использование Apache Commons IO FileUtils
Apache Commons IO — это библиотека, содержащая служебные классы, помогающие решать распространенные проблемы с вводом-выводом. Мы можем удалить содержимое файла, используя один из его служебных классов — FileUtils.
Чтобы увидеть, как это работает, давайте добавим зависимость Apache Commons IO к нашему pom.xml
:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
После этого давайте рассмотрим быстрый пример, демонстрирующий удаление содержимого файла:
FileUtils.write(new File(FILE_PATH), "", Charset.defaultCharset());
6. Использование файлов Java NIO
Файл Java NIO был представлен в JDK 7. Он определяет интерфейсы и классы для доступа к файлам, атрибутам файлов и файловым системам.
Мы также можем удалить содержимое файла, используя java.nio.file.Files
:
BufferedWriter writer = Files.newBufferedWriter(Paths.get(FILE_PATH));
writer.write("");
writer.flush();
7. Использование файлового канала Java NIO
Java NIO FileChannel — это реализация NIO для подключения файла. Он также дополняет стандартный пакет Java IO .
Мы также можем удалить содержимое файла, используя java.nio.channels.FileChannel
:
FileChannel.open(Paths.get(FILE_PATH), StandardOpenOption.WRITE).truncate(0).close();
8. Использование гуавы
Guava — это библиотека на основе Java с открытым исходным кодом, которая предоставляет служебные методы для выполнения операций ввода-вывода. Давайте посмотрим, как использовать API Guava для удаления содержимого файла.
Во-первых, нам нужно добавить зависимость Guava в наш pom.xml
:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>
После этого давайте посмотрим на быстрый пример удаления содержимого файла с помощью Guava:
File file = new File(FILE_PATH);
byte[] empty = new byte[0];
com.google.common.io.Files.write(empty, file);
9. Заключение
Подводя итог, мы видели несколько способов удаления содержимого файла без удаления самого файла.
Полную реализацию этого руководства можно найти на GitHub .