Lesen und Schreiben von GZIP-Dateien in Java

Einführung

Es gibt Fälle, in denen große Dateien unverändert ausgetauscht und gzip komprimiert werden. Organisiertes Lesen und Schreiben von Dateien mit gzip in Java. Es ist von Java8, aber es scheint, dass Java11 auch verwendet werden kann.

Lesen

Nehmen Sie als Beispiel eine gzip-komprimierte CSV-Datei

Der Punkt ist

  1. Verwenden Sie die Try-with-Resources-Syntax
  2. Wrap InputSream mit GZIPInputStream
  3. Wickeln Sie GZIPInputStream mit InputStreamReader ein
  4. Sie können die Codierung angeben, wenn Sie InputStreamReader verwenden
  5. Wickeln Sie den InputStreamReader mit einem BufferedReader ein

Java



Path path = Paths.get("read_test.csv.gz");
try(
  InputStream is = Files.newInputStream(path);
  GZIPInputStream gis = new GZIPInputStream(is);
  InputStreamReader isReader = new InputStreamReader(gis, StandardCharsets.UTF_8);
  BufferedReader br = new BufferedReader(isReader); 
) {
  br.lines().forEach(System.out::println);
}

Das Umschließen mit BufferedReader dient der Leistung. In der Praxis ist es üblich, eine CSV-Ladebibliothek zu verwenden. Hier ist ein Beispiel mit univocity_parsers.

Dies ist ein Beispiel für die Behandlung mit einem Iterator, der eine große Kapazität voraussetzt.

Path path = Paths.get("read_test.csv.gz");
try(
  InputStream is = Files.newInputStream(path);
  GZIPInputStream gis = new GZIPInputStream(is);
  InputStreamReader isReader = new InputStreamReader(gis, StandardCharsets.UTF_8);
  BufferedReader br = new BufferedReader(isReader); 
) {
  CsvParserSettings parserSettings = new CsvParserSettings();
  CsvRoutines routines = new CsvRoutines(parserSettings);
  Iterator<TestDTO> iterator = routines.iterate(TestDTO.class, br).iterator();
  iterator.forEachRemaining(x -> System.out.println(x.toString()));
}

Schreiben

Der Punkt ist fast der gleiche wie beim Lesen

  1. Verwenden Sie die Try-with-Resources-Syntax
  2. Wickeln Sie den Ausgabestream mit einem GZIP-Ausgabestream um
  3. Wickeln Sie GZIPOutputStream mit OutputStreamWriter ein
  4. OutputStreamWriter kann die Codierung angeben
  5. Wrap OutputStreamWriter mit BufferedWriter
Path path = Paths.get("write_test.csv.gz");
try (
  OutputStream os = Files.newOutputStream(path,StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE);
  GZIPOutputStream gzip = new GZIPOutputStream(os);
  OutputStreamWriter ow = new OutputStreamWriter(gzip, StandardCharsets.UTF_8);
  BufferedWriter bw = new BufferedWriter(ow);) {
  List<String> rows = ...;
  rows.stream().forEach(row -> bw.write(row)); 
}  

Hier ist ein Beispiel für das Schreiben mit der CSV-Bibliothek.

Path path = Paths.get("write_test.csv.gz");
try (
  OutputStream os = Files.newOutputStream(path,StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE);
  GZIPOutputStream gzip = new GZIPOutputStream(os);
  OutputStreamWriter ow = new OutputStreamWriter(gzip, StandardCharsets.UTF_8);
  BufferedWriter bw = new BufferedWriter(ow);) {
  List<TestDTO> rows = ...;
  CsvWriterSettings writerSettings = new CsvWriterSettings();
  CsvWriter writer = new CsvWriter(bw , writerSettings);
  rows.stream().forEach(rows -> writer.processRecord(row));
}  

Impressionen

Ich weiß nicht, wie ich es machen soll, aber es fühlt sich so an, als ob ich das Objekt einwickeln sollte. Wenn Sie einen Leser oder Schreiber an die CSV-Bibliothek übergeben, wird dies häufig für Sie erledigt. In dieser Hinsicht lohnt es sich, viele Male einzuwickeln.

Referenzlink

Recommended Posts

Lesen und Schreiben von GZIP-Dateien in Java
[Java] Lesen und Schreiben von Dateien mit OpenCSV
Implementieren Sie das Schreiben und Lesen in die Eigenschaftsliste (.plist) in Swift
Lesen und Schreiben von GZIP-Dateien in Java
[Review] Lesen und Schreiben von Dateien mit Java (JDK6)
Unterschiede beim Schreiben von Java-, C # - und Javascript-Klassen
Lesen Sie Binärdateien in Java 1
Lesen Sie Binärdateien in Java 2
Ich habe versucht, C # zu kauen (Dateien lesen und schreiben)
Implementieren Sie das Schreiben und Lesen in die Eigenschaftsliste (.plist) in Swift
Einfaches Lesen von Textdateien in Java (Java 11 & Java 7)
Beispiel für Codierung und Decodierung in Java
StringBuffer- und StringBuilder-Klasse in Java
Verstehe gleich und hashCode in Java
Hallo Welt in Java und Gradle
Unterschied zwischen final und Immutable in Java
Schriftliche Unterschiede in Ruby, PHP, Java, JS
Konvertieren Sie SVG-Dateien in Java in PNG-Dateien
Spielen Sie RAW-, WAV- und MP3-Dateien in Java ab
Fortsetzung Sprechen Sie über das Schreiben von Java mit Emacs @ 2018
Unterschied zwischen Arrylist und verknüpfter Liste in Java
Programmieren Sie PDF-Kopf- und Fußzeilen in Java
Die Geschichte des Schreibens von Java in Emacs
Lernen Sie Flyweight-Muster und ConcurrentHashMap in Java
Die Richtung von Java in "C ++ Design and Evolution"
Unterschied zwischen int und Integer in Java
Diskriminierung von Enum in Java 7 und höher
Geben Sie die Reihenfolge an, in der die Konfigurationsdateien und Klassen in Java geladen werden
Hinweise zum Lesen und Generieren von XLSX-Dateien aus Java mit Apache POI
Erkennen Sie ähnliche Videos in Java und OpenCV Version 2
[Java] Was soll ich zum Schreiben von Dateien verwenden?
Techniken zum Lesen von Java-Quellcode in Eclipse
Partisierung in Java
Parallele und parallele Verarbeitung in verschiedenen Sprachen (Java Edition)
Unterschied zwischen next () und nextLine () in Java Scanner
Änderungen in Java 11
Fügen Sie CSV-Dateien mit "'" und "" "in Ruby 2.3 in MySQL ein
Janken in Java
Erfassen und speichern Sie die Selen-Installation in Java
Erkennen Sie ähnliche Videos in Java und OpenCV Version 3
[Java] Verstehe in 10 Minuten! Assoziatives Array und HashMap
Fassen Sie die Unterschiede zwischen C # - und Java-Schrift zusammen
XXE und Java
Einführung in Apache Beam (1) ~ Lesen und Schreiben von Text ~
Java fügt Wasserzeichen in Word-Dokumenten hinzu und entfernt sie
Erkennen Sie ähnliche Videos in Java und OpenCV Version 1
Umfangsrate in Java
Repräsentiert "nächster Tag" und "vorheriger Tag" in Java / Android
Importieren Sie Dateien derselben Hierarchie in Java
Laden Sie Notizen in Java auf S3 hoch und laden Sie sie herunter
Verschlüsseln / Entschlüsseln mit AES256 in PHP und Java
Generieren Sie OffsetDateTime aus Clock und LocalDateTime in Java
FizzBuzz in Java
Organisieren Sie den Unterschied im Schreibkomfort zwischen dem Java-Lambda-Ausdruck und dem Kotlin-Lambda-Ausdruck.
[Android / Java] Bildschirmübergang und Rückgabeverarbeitung in Fragmenten
Konvertieren Sie JSON und YAML in Java (mit Jackson und SnakeYAML)
Versuchte Mastodons Toot- und Streaming-API in Java