Перейти к основному содержимому

Удалить содержимое файла в Java

· 3 мин. чтения

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 .