Mehrere (XML-)Datei aus einer ZIP-Datei auslesen

Status
Nicht offen für weitere Antworten.

Daniel_L

Bekanntes Mitglied
Hallo,

ich habe ein Problem beim Auslesen mehrerer Dateien aus einer Zip-Datei. Hier mein Code:

Code:
            try {
                ZipInputStream zip = new ZipInputStream(new FileInputStream(fp));
                ZipEntry entry;
                
                while ((entry=zip.getNextEntry())!=null) {
                    String entryname = entry.getName();

                    if (entryname.equals("zknFile.xml") ||
                        entryname.equals("authorFile.xml") ||
                        entryname.equals("keywordFile.xml")) {
                        try {
                            SAXBuilder builder = new SAXBuilder();
                            Document doc = new Document();
                            doc = builder.build(zip);

                            if (entryname.equals("zknFile.xml")) dataObj.setZknData(doc);
                            if (entryname.equals("authorFile.xml")) dataObj.setAuthorData(doc);
                            if (entryname.equals("keywordFile.xml")) dataObj.setKeywordData(doc);
                        }
                        catch (JDOMException e) {
                            System.out.println("Fehler bei SaxBuilder");
                            e.printStackTrace();
                            Logger.getLogger(CLoadDialog.class.getName()).log(Level.SEVERE, null, e);
                        }
                    }
                }
                zip.close();
            }
            catch (IOException e) {
                System.out.println("Fehler bei NextEnry");
                e.printStackTrace();
                Logger.getLogger(CLoadDialog.class.getName()).log(Level.SEVERE, null, e);
            }

Eine einzelne XML-Datei auslesen, funktioniert wunderbar. Nun wollte ich aber 3 XML-Dateien aus der ZIP-Datei auslesen. Bei Google (und auch in diesem Forum) habe ich eben die Lösung mit dem "while getNextExtry() != null" gefunden. Aber sobald die erste XML-Datei eingelesen ist, gibt es einen Fehler, wenn die while-Schleife zum zweiten mal für die nächste Datei durchlaufen werden soll. Das sagt das Debug-Fenster:

Fehler bei NextEnry
java.io.IOException: Stream closed
at java.util.zip.ZipInputStream.ensureOpen(ZipInputStream.java:44)
at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:68)
at zettelkasten.CLoadDialog$LoadFileTask.doInBackground(CLoadDialog.java:313)
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)

Ich versteh allerdings nicht, was genau falsch ist? Die drei XML-Dateien habe ich zuvor problemlos folgendermaßen erstellt:

Code:
            ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(data.getFilePath()));
            XMLOutputter out = new XMLOutputter();
            
            zip.putNextEntry(new ZipEntry("zknFile.xml"));
            out.output(data.getZknData(), zip);
            
            zip.putNextEntry(new ZipEntry("authorFile.xml"));
            out.output(data.getAuthorData(), zip);

            zip.putNextEntry(new ZipEntry("keywordFile.xml"));
            out.output(data.getKeywordData(), zip);
            
            zip.close();

Hat jemand eine Ahnung, wo der Fehler liegen könnte?

Vielen Dank und Gruß
Daniel
 
G

Gast

Gast
Ich meine mich daran zu erinnern, das der SAX Parser irgendwie die FileHandle unter Windows nicht sauber verwaltet. Am besten googelst du mal in diese Richtung.
 

Daniel_L

Bekanntes Mitglied
Ach so, ich arbeite mit Mac OS X 10.5.5 (NetBeans 6.1) und JDK6. Aber ich google trotzdem mal, vielleicht finde ich was...
 

Daniel_L

Bekanntes Mitglied
Das Problem ist wohl, dass der SAXBuilder den Input-Stream automatisch schließt. D.h., ich müsste für jede XML-Datei die while-schleife neu durchlaufen. Hab das jetzt vorerst so gelöst, was auch funktioniert, aber wenig elegant aussieht:

Code:
                ZipInputStream zipzkn = new ZipInputStream(new FileInputStream(fp));
                ZipEntry entryzkn;
                
                while ((entryzkn=zipzkn.getNextEntry())!=null) {
                    String entryname = entryzkn.getName();
 
                    if (entryname.equals("zknFile.xml")) {
                        try {
                            SAXBuilder builder = new SAXBuilder();
                            Document doc = new Document();
                            doc = builder.build(zipzkn);
                            dataObj.setZknData(doc);
                            break;
                        }
                        catch (JDOMException e) {
                            e.printStackTrace();
                            Logger.getLogger(CLoadDialog.class.getName()).log(Level.SEVERE, null, e);
                        }
                    }
                }
                zipzkn.close();
 
                // second step, retrieve author-data
                ZipInputStream zipauth = new ZipInputStream(new FileInputStream(fp));
                ZipEntry entryauth;
                
                while ((entryauth=zipauth.getNextEntry())!=null) {
                    String entryname = entryauth.getName();
 
                    if (entryname.equals("authorFile.xml")) {
                        try {
                            SAXBuilder builder = new SAXBuilder();
                            Document doc = new Document();
                            doc = builder.build(zipauth);
                            dataObj.setAuthorData(doc);
                            break;
                        }
                        catch (JDOMException e) {
                            e.printStackTrace();
                            Logger.getLogger(CLoadDialog.class.getName()).log(Level.SEVERE, null, e);
                        }
                    }
                }
                zipauth.close();
                
                // thir step, retrieve keyword-data
                ZipInputStream zipkw = new ZipInputStream(new FileInputStream(fp));
                ZipEntry entrykw;
                
                while ((entrykw=zipkw.getNextEntry())!=null) {
                    String entryname = entrykw.getName();
 
                    if (entryname.equals("keywordFile.xml")) {
                        try {
                            SAXBuilder builder = new SAXBuilder();
                            Document doc = new Document();
                            doc = builder.build(zipkw);
                            dataObj.setKeywordData(doc);
                            break;
                        }
                        catch (JDOMException e) {
                            e.printStackTrace();
                            Logger.getLogger(CLoadDialog.class.getName()).log(Level.SEVERE, null, e);
                        }
                    }
                }
                zipkw.close();
            }

Vielleicht setze ich noch mal eine äußere Schleife für die einzulesenen XML-Dateien um eine einzige innere while-schleife, sodass sich der Code-Block nicht ständig wiederholt...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Mehrere PNG-Files in einer Datei Allgemeine Java-Themen 9
H Mehrere Bilder aus einer Datei lesen Allgemeine Java-Themen 2
C mehrere Java Klassen in einer Datei Allgemeine Java-Themen 4
X Mehrere booleans in Datei Speichern, Updaten und Laden Allgemeine Java-Themen 1
E Lesen von mehrere Csv-Datei und ihre Inhalte vergleichen Allgemeine Java-Themen 3
Beckenbauer Mehrere Paragraphe in eine Word Datei schreiben Allgemeine Java-Themen 4
I Mehrere Klassen mit den selben Daten Allgemeine Java-Themen 5
berserkerdq2 Ist es schlechter Programmierstyle mehrere Panes aufeinander zu machen? Allgemeine Java-Themen 1
Tarrew OpenAPI Schnittstelle - Mehrere Kunden mit unterschiedlichen Zugriffsrechten Allgemeine Java-Themen 2
A Mehrere for-Schleifen Allgemeine Java-Themen 2
M Mehrere Sounds Allgemeine Java-Themen 3
M Mehrere Ressourcen in einem package ablegen Allgemeine Java-Themen 1
Avalon DTO aus mehrere Entitäten erstellen Allgemeine Java-Themen 5
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
bueseb84 Git : Mehrere Server verwenden Allgemeine Java-Themen 3
L Mehrere .Jar Files aufrufen Allgemeine Java-Themen 9
L mehrere Methoden Allgemeine Java-Themen 19
W Variablenübergabe über mehrere Klassen Allgemeine Java-Themen 4
B StAX Parser - mehrere Methoden, ein XML Allgemeine Java-Themen 4
T String mehrere Worte Allgemeine Java-Themen 2
N Bei Mouse Events nicht mehrere Objekte erstellen Allgemeine Java-Themen 13
J Variablen Mehrere int-variablen in txt abspeichern und danach wieder auslesen Allgemeine Java-Themen 1
S JTable - mehrere ausgewählte Rows in ArrayList Allgemeine Java-Themen 5
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
F Listen - Mehrere Objekte Allgemeine Java-Themen 1
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
S libGDX mehrere Texturen zu Einer zusammenfassen Allgemeine Java-Themen 0
OnDemand CSV parsen mehrere Zeilen Allgemeine Java-Themen 22
K Mehrere Programmiersprachen gleichzeitig lernen Allgemeine Java-Themen 3
C Mehrere Seiten drucken in Hoch- und Querformat Allgemeine Java-Themen 0
perlenfischer1984 Mehrere Komponenten erstellen Allgemeine Java-Themen 3
F AWT Mehrere Tastatureingaben verarbeiten Allgemeine Java-Themen 5
J Mehrere Wörter getrennt in eine Array einlesen, wie ? Allgemeine Java-Themen 7
HarleyDavidson Best Practice Integer-Zahlenfolge über mehrere Programmstarts Allgemeine Java-Themen 7
F Mehrere JTables' drucken Allgemeine Java-Themen 0
2 mehrere Json Werte Parsen Allgemeine Java-Themen 3
stylegangsta Mehrere html seiten einer Homepage einlesen und als Textdatei ausgeben Allgemeine Java-Themen 14
P Mehrere Java Versionen auf dem Rechner Allgemeine Java-Themen 3
B JAVA - mehrere Clienten gleichzeitig starten. Nicht bei Code! Allgemeine Java-Themen 3
S PrintWriter.println() schreibt mehrere Zeilen Allgemeine Java-Themen 19
2 Mehrere Uhrzeiten Sortieren Allgemeine Java-Themen 2
T Jsoup: Mehrere Links nacheinander parsen Allgemeine Java-Themen 11
T Schlüsselworte mehrere public-Klassen in einem Paket Allgemeine Java-Themen 7
K GUI-Entwicklung - Dispose, enabling und mehrere Controller Allgemeine Java-Themen 1
M Eclipse Mehrere Threads, mehrere Konsolen Allgemeine Java-Themen 4
A Threads Lock über mehrere Abschnitte in verschiedenen Methoden Allgemeine Java-Themen 5
B Mehrere Objekte verschlüsselt serialisieren Allgemeine Java-Themen 6
S Tool um mehrere Klassen in einer Klasse vereinen? Allgemeine Java-Themen 6
K Mehrere Arrays auf einmal erstellen Allgemeine Java-Themen 2
R ListIterator über mehrere Arrays Allgemeine Java-Themen 13
J JFreeChart - Mehrere X-Achsen Einteilungen Allgemeine Java-Themen 3
S Mehrere Shapes "malen" Allgemeine Java-Themen 3
M Input/Output Mehrere Bilder aus Resourcen auslesen Allgemeine Java-Themen 8
J Erste Schritte Mehrere Mauszeiger für Ping Pong Game Allgemeine Java-Themen 7
P Mehrere MP3s abspielen Allgemeine Java-Themen 3
M Mehrere CRLF entfernen Allgemeine Java-Themen 13
F Mehrere Threads - ein Stack Allgemeine Java-Themen 6
K Mehrere JVMs die auf eine Klasse mit statischen Variablen zugreift Allgemeine Java-Themen 19
B JUnit und mehrere Instanzen der selben Applikation Allgemeine Java-Themen 4
G mehrere Threads starten/stoppen Allgemeine Java-Themen 4
A Email versenden mehrere Zeilen Allgemeine Java-Themen 10
D Mehrere String-Werte in eine Tabellen-Zelle schreiben Allgemeine Java-Themen 8
R JTree - Mehrere Roots Allgemeine Java-Themen 6
H Mehrere Anwendungen von Java kontrollieren lassen Allgemeine Java-Themen 10
T Edit: JLabel+MouseListener oeffnet mehrere Instanzen Allgemeine Java-Themen 5
O split mit einem ODER mehrere Tabulatoren oder Leerzeichen Allgemeine Java-Themen 6
M JFreeChart mehrere PieCharts erstellen Allgemeine Java-Themen 2
S Wie kann ein Observer mehrere Observables beobachten? Allgemeine Java-Themen 9
T Synchronisation von Listen bei Zugriffen durch mehrere Prozesse Allgemeine Java-Themen 15
D befehl auf mehrere objekte anwenden Allgemeine Java-Themen 7
B mehrere services in einem client Allgemeine Java-Themen 10
Meldanor Speichern der Datenbank - Lohnen sich mehrere Threads? Allgemeine Java-Themen 2
G Process - mehrere Commands?! Allgemeine Java-Themen 2
O Mehrere Exemplare(Kopieen) drucken Allgemeine Java-Themen 2
S log4j Logging über mehrere Klassen Allgemeine Java-Themen 13
F 1 Key - mehrere Values Allgemeine Java-Themen 3
G JOGL mehrere GLCanvas erstellen Allgemeine Java-Themen 2
S Mehrere Listen ineinander verschachteln Allgemeine Java-Themen 22
P Java3D mehrere Ebenen parallel zu yz-Ebene Allgemeine Java-Themen 9
R mehrere jar Dateien kompinieren Allgemeine Java-Themen 14
P Mehrere Instanzen der selben Appl. verhindern Allgemeine Java-Themen 12
M Scanner-Methode: Mehrere Eingaben mit Exception behandeln Allgemeine Java-Themen 10
I Wie kann ich mehrere Mp3 Tags ausgeben? Allgemeine Java-Themen 6
I Mehrere MP3 Dateien einlesen? Allgemeine Java-Themen 3
G String.replaceall - mehrere Zeichen durch eines ersetzen Allgemeine Java-Themen 5
C ArrayList sortieren (mehrere Kriterien) Allgemeine Java-Themen 6
N mehrere klassen extenden Allgemeine Java-Themen 33
G Oracle will mehrere hundert Produkte patchen Allgemeine Java-Themen 5
F Logger in mehrere Dateien mit log4J Allgemeine Java-Themen 4
W Properties-Klasse: mehrere Parameter-Belegungen übergeben? Allgemeine Java-Themen 2
V Mehrere main() in jar, wie starten? Allgemeine Java-Themen 4
A Problem: Mehrere PDF-Files nacheinander Öffnen Allgemeine Java-Themen 12
D Mit Linux mehrere Kommandos in einem Subprozeß Allgemeine Java-Themen 3
D Suche sowas wie Map nur für mehrere Werte Allgemeine Java-Themen 13
V JFilechooser, mehrere Datein selektieren und Reihenfolge? Allgemeine Java-Themen 2
G mehrere Threads verwalten? Allgemeine Java-Themen 14
K Applet dass auf mehrere Bibliotheken zugreift Allgemeine Java-Themen 13
F mehrere Verzeichnisse als Parameter Allgemeine Java-Themen 15
G mehrere url's in ein array (problem mit // ) Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben