23 Stimmen

Das Lesen von Textdateien in einem Zip-Archiv

Ich habe ein Zip-Archiv, das eine Reihe von Textdateien enthält. Ich möchte die Daten jeder Textdatei analysieren. Hier ist, was ich bisher geschrieben habe:

try {
    final ZipFile zipFile = new ZipFile(chooser.getSelectedFile());
    final Enumeration entries = zipFile.entries();
    ZipInputStream zipInput = null;

    while (entries.hasMoreElements()) {
        final ZipEntry zipEntry = entries.nextElement();
        if (!zipEntry.isDirectory()) {
            final String fileName = zipEntry.getName();
            if (fileName.endsWith(".txt")) {
                zipInput = new ZipInputStream(new FileInputStream(fileName));
                final RandomAccessFile rf = new RandomAccessFile(fileName, "r");
                String line;
                while((line = rf.readLine()) != null) {
                    System.out.println(line);
                }
                rf.close();
                zipInput.closeEntry();
            }
        }
    }
    zipFile.close();
}
catch (final IOException ioe) {
    System.err.println("Nicht behandelte Ausnahme:");
    ioe.printStackTrace();
    return;
}

Brauche ich ein RandomAccessFile dafür? Ich bin an dem Punkt mit dem ZipInputStream verloren.

43voto

Jon Skeet Punkte 1325502

Nein, du brauchst kein RandomAccessFile. Hol dir zuerst einen InputStream mit den Daten für diesen Zip-Dateieintrag:

InputStream input = zipFile.getInputStream(entry);

Wikle ihn dann in einen InputStreamReader (um von Binär zu Text zu konvertieren) und einen BufferedReader (um eine Zeile auf einmal zu lesen):

BufferedReader br = new BufferedReader(new InputStreamReader(input, "UTF-8"));

Dann lies Zeilen davon wie gewohnt. Verpacke alle relevanten Teile auch in try/finally-Blöcken, um alle Ressourcen zu schließen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X