В этом посте будет обсуждаться, как удалить содержимое файла, не удаляя сам файл в Java.
1. Использование BufferedWriter
Простое решение — получить BufferedWriter
с Files.newBufferedWriter(…) метод с TRUNCATE_EXISTING
стандартный открытый вариант. Он обрезает файл до длины 0, если он уже существует (при открытии для записи).
Полное использование показано ниже с использованием оператора try-with-resource (Java 7+), который автоматически позаботится о закрытии открытых потоков и каналов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import java.io.BufferedWriter; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; public class Main { public static void main(String[] args) { String fileName = "/user/data/sys.log"; try (BufferedWriter bf = Files.newBufferedWriter(Path.of(fileName), StandardOpenOption.TRUNCATE_EXISTING)) { } catch (IOException e) { e.printStackTrace(); } } } |
2. Использование PrintWriter
Кроме того, вы можете создать новый PrintWriter
с указанным именем файла. Это приводит к усечению файла до нулевого размера, если он уже существует.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.io.IOException; import java.io.PrintWriter; public class Main { public static void main(String[] args) { String fileName = "/user/data/sys.log"; try { PrintWriter pw = new PrintWriter(fileName); pw.close(); } catch (IOException e) { e.printStackTrace(); } } } |
Вот эквивалентная версия с оператором try-with-resource, который заботится о закрытии потока:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.io.IOException; import java.io.PrintWriter; public class Main { public static void main(String[] args) { String fileName = "/user/data/sys.log"; try (PrintWriter pw = new PrintWriter(fileName)){ } catch (IOException e) { e.printStackTrace(); } } } |
3. Использование FileChannel
The FileChannel
класс обеспечивает truncate()
метод, который может обрезать файл до заданного размера. Его использование показано ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import java.io.IOException; import java.nio.channels.FileChannel; import java.nio.file.Path; import java.nio.file.StandardOpenOption; public class Main { public static void main(String[] args) { String fileName = "/user/data/sys.log"; try { FileChannel.open(Path.of(fileName), StandardOpenOption.WRITE) .truncate(0).close(); } catch (IOException e) { e.printStackTrace(); } } } |
4. Использование RandomAccessFile
С RandomAccessFile
class, вы можете установить длину файла с помощью setLength()
метод. Чтобы обрезать файл, передайте длину файла как 0, как показано ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.io.IOException; import java.io.RandomAccessFile; public class Main { public static void main(String[] args) { String fileName = "/user/data/sys.log"; try (RandomAccessFile raf = new RandomAccessFile(fileName, "rw")) { raf.setLength(0); } catch (IOException e) { e.printStackTrace(); } } } |
5. Использование FileOutputStream
Наконец, вы можете использовать FileOutputStream
обрезать файл до длины 0, если он существует. Типичный вызов для этого класса будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.io.FileOutputStream; import java.io.IOException; public class Main { public static void main(String[] args) { String fileName = "/user/data/sys.log"; try (FileOutputStream fos = new FileOutputStream(fileName, false)) { } catch (IOException e) { e.printStackTrace(); } } } |
Это все об удалении содержимого файла без удаления самого файла в Java.