XML-Datei aus Zip-Datei auslesen, ohne temporär zu entpacken

Status
Nicht offen für weitere Antworten.

Daniel_L

Bekanntes Mitglied
Hallo,

folgendes Problem: Ich möchte mehrere XML-Dateien in einer Zip-Datei speichern und auch wieder laden. Dabei möchte ich, wenn es geht, die XML-Dateien nicht vor dem "zippen" temporär auf Festplatte speichern - und umgekehrt, wenn ich die XML-Dateien aus dem Zip-Archiv einlese, möchte ich diese auch nicht temporär auf Platte speichern müssen.

Meine Frage: Geht das überhaupt? Wäre über Denkanstöße dankbar!

Gruß
Daniel
 
G

Gelöschtes Mitglied 5909

Gast
klar geht das:

http://www.exampledepot.com/egs/java.util.zip/GetZip.html

und mit entry.getName() etc kannst du guggn ob du die richtige xml hast und gegebenenfals mit getNextEntry() dann eine "datei" in der zip überspringen

java.util.zip.ZipInputStream
int read(byte[] b, int off, int len)
Reads from the current ZIP entry into an array of bytes.

und dann machst du da noch n InpuStreamReader außenrum und packst den dann in einen parser deiner wahl
 
S

Spacerat

Gast
Hallo...

Das erinnert mich an das OpenDocumentFormat von OpenOffice... Tolle Sache das... Gibt es dafür nicht auch schon einen Java-Reader?

mfg Spacerat
 

Wildcard

Top Contributor
Es gibt die ODF Tools und natürlich kann man auch die UNO API verwenden um OpenOffice selbst von Java aus zu steuern.
 

Daniel_L

Bekanntes Mitglied
So, ich habe mal ausprobiert, aber so richtig will das nicht klappen. Vielleicht versteh ich die Funktionsweise von Input/Output-Streams auch nicht.

Mein aktueller Versuch sieht so aus:
Code:
            try {
                ZipInputStream in = new ZipInputStream(new FileInputStream(fp));
                ZipEntry entry = in.getNextEntry();

                SAXBuilder builder = new SAXBuilder();
                Document doc = new Document();
                doc = builder.build(in);
                
                XMLOutputter out = new XMLOutputter(); 
                out.output( doc, System.out );
                in.close();
            }
            catch (IOException e) {
            
            }

An der Stelle "doc = builder.build(in)" springt er aus der try-Anweisung raus und zum Ende der Funktion (d.h. alles ab XMLOutputter wird nicht mehr ausgeführt, habe ich auch per Debugger getestet). Die Variable "fp" verweist auf eine zip-Datei. Wenn ich das von raiL gepostete Beispiel verwende, kann ich problemlos die in der ZIP-Datei enthaltene XML-Datei per OutputStream auf Festplatte speichern. Ich möchte ja aber gerne die Datei direkt, ohne "Umweg" über einen Datenträger, einlesen.

Kann mir da jemand weiterhelfen?

Vielen Dank und Gruß
Daniel
 

Wildcard

Top Contributor
So nicht. Der InputStream ist gezippt, die Nutzdaten stehen im Entry.
Code:
            catch (IOException e) {
           
            }
Mach sowas niemals. Das minimum ist ein e.printStackTrace, in einer fertigen Anwendung muss da logging rein.
 

Daniel_L

Bekanntes Mitglied
Gut, der fehlende Inhalt im catch-Bereich folgt noch. Aber zurück zu deiner Antwort: wie kann ich dann mit "entry" arbeiten? Das oben verlinkte Beispiel sieht folgendermaßen aus:
Code:
    try {
        // Open the ZIP file
        String inFilename = "infile.zip";
        ZipInputStream in = new ZipInputStream(new FileInputStream(inFilename));
    
        // Get the first entry
        ZipEntry entry = in.getNextEntry();
    
        // Open the output file
        String outFilename = "o";
        OutputStream out = new FileOutputStream(outFilename);
    
        // Transfer bytes from the ZIP file to the output file
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
    
        // Close the streams
        out.close();
        in.close();
    } catch (IOException e) {
    }

Wenn ich "outFilename" in den Typ "File" ändere und einen Dateinamen vergebe, wird - obwohl die Variable "in" verwendet wird - die XML-Datei ausgelesen und auf Festplatte gespeichert. Im obigen Beispiel brauche ich "entry" also auch nicht verwenden. Außerdem verlangt der SAXBuilder ja nach einem InputStream. Hm...
 

Daniel_L

Bekanntes Mitglied
Kurzer Nachtrag: Außerdem müsste ich mindesten zwei try-Anweisungen verschachteln, oder? Eine für den ZipInputStream, und eine für den SAXBuilder...
 

Wildcard

Top Contributor
... mein Fehler.
Code:
              ZipInputStream in = new ZipInputStream(new FileInputStream(fp));
                ZipEntry entry = in.getNextEntry();

                SAXBuilder builder = new SAXBuilder();
                Document doc = new Document();
                doc = builder.build(in);
So war schon ok. Umso wichtiger ist eben die Ausgabe der Exception.
 

Daniel_L

Bekanntes Mitglied
Ok, der Code ist vom Ansatz her richtig, ja?

Hier die Fehlermeldung:
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 4-byte UTF-8 sequence.
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:674)
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:463)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1742)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.scanLiteral(XMLEntityScanner.java:1069)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(XMLScanner.java:813)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanAttribute(XMLNSDocumentScannerImpl.java:460)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:277)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2747)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
at org.jdom.input.SAXBuilder.build(SAXBuilder.java:807)
at zettelkasten.CLoadDialog$LoadFileTask.doInBackground(CLoadDialog.java:297)
at org.jdesktop.swingworker.SwingWorker$1.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at org.jdesktop.swingworker.SwingWorker.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:637)
22.10.2008 10:35:22 zettelkasten.CLoadDialog$LoadFileTask doInBackground

Kann der Parser die in der ZIP-Datei enthaltene XML-Datei nicht lesen? Verstehe ich das richtig? Das ist jetzt eine, die ich auf die schnelle auf meiner Platte gefunden habe, und keine XML-Datei, mit mit dem SAXBuilder gespeichert wurde. Vielleicht sollte ich da was anderes ausprobieren?
 

Daniel_L

Bekanntes Mitglied
Ok, alles zurück!

:oops:

Es lag tatsächlich an der XML-Datei. Habe eine andere versucht, und die wird korrekt ausgegeben... Auf sowas muss man kommen.
 

wurzeljunge

Mitglied
hi leute,

ich hab genau das gleiche vor, jedoch mit einem passwortgeschützten .7z-archiv.

geht das? bzw. gibt es eine klasse, die das gleiche auch mit passwortgeschützten archiven kann?
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
Gaudimagspam CSV-Datei auslesen in Java Allgemeine Java-Themen 7
B .txt Datei erstellen und auslesen bzw. schreiben Allgemeine Java-Themen 6
N Txt Datei auslesen. Allgemeine Java-Themen 5
O xlsx Datei auslesen mit POI Apache liest keine LEERZELLEN Allgemeine Java-Themen 6
O xlsx Datei auslesen mit POI von Apache wirft seltsamen Fehler. Allgemeine Java-Themen 11
S Hilfe bei dem Auslesen einer YAML Datei Allgemeine Java-Themen 8
T Url aus txt Datei auslesen und öffnen? Allgemeine Java-Themen 4
T Datei Byteweise auslesen Allgemeine Java-Themen 1
T Ini Datei auslesen Allgemeine Java-Themen 3
J Wav-Datei aus .jar auslesen Allgemeine Java-Themen 7
D CSV Datei auslesen Allgemeine Java-Themen 23
J Java JSON-Datei aus .Zip auslesen und Download mit Progress Bar Allgemeine Java-Themen 20
A Auslesen einer Datei sowie ausgeben als Liste in App Allgemeine Java-Themen 5
T datei auslesen ind der richtigen reihenfolge Allgemeine Java-Themen 2
B Compiler-Fehler NullPointerException beim Auslesen von .lang-Datei Allgemeine Java-Themen 3
P Swing Icon von Exe Datei auslesen Allgemeine Java-Themen 8
M datei aufruf datum auslesen Allgemeine Java-Themen 5
D .txt Datei Auslesen Allgemeine Java-Themen 2
H Icon einer Datei auslesen Allgemeine Java-Themen 2
J Problem beim Auslesen einer Datei vom Server Allgemeine Java-Themen 4
C Auslesen + Bearbeiten einer UTF8 Datei Allgemeine Java-Themen 5
A Applet Jar Datei auslesen Allgemeine Java-Themen 3
S String aus Datei-Zeile auslesen Allgemeine Java-Themen 6
F Datei aus JAR auslesen Allgemeine Java-Themen 11
D Swing Datei vom Webserver auslesen Allgemeine Java-Themen 3
W Datei auslesen und die Daten weiter verarbeiten Allgemeine Java-Themen 4
D Pfad aus Ressource-Datei auslesen Allgemeine Java-Themen 7
C Datei auslesen wie unter Linux mit "tail -f" Allgemeine Java-Themen 3
I Große Datei am effektivsten/performantesten auslesen und auswerten? Allgemeine Java-Themen 6
hdi Auslesen der Farbwerte einer Grafik-Datei Allgemeine Java-Themen 4
M Frage zum Auslesen einer Datei auf nem Server Allgemeine Java-Themen 4
K need help ; Werte aus einer Datei auslesen Allgemeine Java-Themen 4
V Erstelldatum einer Datei auslesen Allgemeine Java-Themen 4
M Problem mit Zeichen aus einer Datei auslesen Allgemeine Java-Themen 2
multiholle Länge einer MP3-Datei auslesen Allgemeine Java-Themen 2
R Parser: Datei auslesen, Datei erstellen - Geschwindigkeit Allgemeine Java-Themen 16
G Blind-Datei (Passwort auslesen) Allgemeine Java-Themen 5
A CSV-Datei (Spalt A -> Excel) in Array packen und auslesen Allgemeine Java-Themen 25
Daniel_L Mehrere (XML-)Datei aus einer ZIP-Datei auslesen Allgemeine Java-Themen 4
W Variablenbelegung aus Datei auslesen Allgemeine Java-Themen 2
A Auslesen von Strings aus einer xls-Datei Allgemeine Java-Themen 16
P Pfad der gerade ausgeführten Jar-Datei auslesen Allgemeine Java-Themen 2
L Werte in externer Datei speichern und wieder auslesen? Allgemeine Java-Themen 8
R Log-Datei auslesen Allgemeine Java-Themen 8
E Eine .wsp datei in java öffnen auslesen und verändern Allgemeine Java-Themen 4
MQue Datei einlesen/auslesen Allgemeine Java-Themen 4
A Problem mit dem Auslesen aus einer Datei Allgemeine Java-Themen 4
J XML-Datei byteweise einlesen und Kodierung auslesen Allgemeine Java-Themen 4
J Zeilenweise in Datei schreiben/auslesen Allgemeine Java-Themen 3
M Array in eine Datei Schreiben und wieder auslesen Allgemeine Java-Themen 10
H strings in datei verschlüsseln , auslesen mit klartext aber! Allgemeine Java-Themen 2
zilti Datei dekomprimieren und auslesen Allgemeine Java-Themen 16
X Manifest Datei auslesen? Allgemeine Java-Themen 3
W Datei und druckerfreigaben von lokalem Rechner auslesen. Allgemeine Java-Themen 2
K Text-Datei auslesen Allgemeine Java-Themen 3
D Zeilenweises auslesen aus einer Unicode CSV-Datei Allgemeine Java-Themen 7
F PDF-Datei auslesen Allgemeine Java-Themen 5
M Datei immer auslesen können, auch im JAR Allgemeine Java-Themen 7
S BibTex-Datei auslesen Allgemeine Java-Themen 2
H Datei auslesen und in einem Textfeld ausgeben. Allgemeine Java-Themen 8
M MP3 Datei selber parsen/werte auslesen Allgemeine Java-Themen 13
S Tonspuren einer Midi Datei auslesen Allgemeine Java-Themen 2
L Auslesen einer Datei mit Floats Allgemeine Java-Themen 4
L Merkwürdiger Fehler beim auslesen einer Datei Allgemeine Java-Themen 2
M datei informationen auslesen Allgemeine Java-Themen 16
F Datei auslesen - wo ist mein Fehler? Allgemeine Java-Themen 9
L Werte aus einer Datei auslesen Allgemeine Java-Themen 18
M Auslesen von Daten aus einer txt Datei fast funktionierend Allgemeine Java-Themen 2
I Dateiattribute (Erstellungsdatum aus Datei auslesen) Allgemeine Java-Themen 7
G Einzelne Keys aus Properties-Datei auslesen Allgemeine Java-Themen 4
J Auslesen UTF-8 Datei Allgemeine Java-Themen 3
D Excel-Datei mit Java auslesen Allgemeine Java-Themen 1
S Titel aus HTML-Datei auslesen Allgemeine Java-Themen 5
G Adressen in Datei speichern und wieder auslesen Allgemeine Java-Themen 3
kodela StatusBar-Anzeigen auch in Log-Datei ausgeben Allgemeine Java-Themen 3
G Maven Projekt JAR-Datei Allgemeine Java-Themen 6
E XML - Datei Darstellung in IntelliJ als Baum Allgemeine Java-Themen 2
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
D Erste Schritte Mp3 Datei kann nicht von der Festplatte geöffnet werden - mit ChatGPT erstellt Allgemeine Java-Themen 7
J Filenotfoundexception obwohl Datei existiert Allgemeine Java-Themen 6
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
E Datei verschoben Event Allgemeine Java-Themen 3
D Datei mit "Kohsuke GitHub API" in Repository hochladen Allgemeine Java-Themen 2
S Bookmark HTML Datei einlesen, alle Links erhalten und manche editieren..? (aktuell JSoup) Allgemeine Java-Themen 4
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
G JavaFX Maven Projekt als .exe Datei exportieren Allgemeine Java-Themen 10
J (Geplante) Änderungen an einer Datei vorübergehend speichern und anwenden? Allgemeine Java-Themen 12
Neumi5694 Datei komprimiert Allgemeine Java-Themen 6
_user_q Obfuscate einer .jar-Datei mit ProGuard? Allgemeine Java-Themen 2
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
E java mithilfe url .jar datei öffnen Allgemeine Java-Themen 9
E Java .exe Datei mit args starten Allgemeine Java-Themen 2
W Bilder werden in App mit Jar-Datei nicht angezeigt Allgemeine Java-Themen 15
Master3000 Java Datei mehrmals einlesen Allgemeine Java-Themen 4
M Excel Datei Erstellen Allgemeine Java-Themen 2
E Input/Output Eigene Datei mit java öffnen Allgemeine Java-Themen 9
R Sonderzeichen aus Datei einlesen und in Datei ausgeben. Allgemeine Java-Themen 17
Tobero Download .jar von github lädt kaputte Datei runter Allgemeine Java-Themen 3
P Bat Datei in Java ausführen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben