Huecheln Geschrieben 22. Januar 2009 Teilen Geschrieben 22. Januar 2009 Hallo erstman. Ich habe ein ZIP-Archiv, in dem ich nach einer bestimmten Datei suchen will. Das hab ich auch soweit hin bekommen. Aber wie bekomme ich es jetzt hin, dass ich genau diese Datei dann Zeilenweise auf der Konsole ausgeben kann. Wie das mit Dateien ausserhalb eines ZIP-Archievs geht, steht im Quellcode. Aber wie macht man das nun mit gezippten Dateien ??? try{ File rootDirectory = new File("C:/Dokumente und Einstellungen/huecheln/Desktop/Testdateien"); File[] rootDirectoryList = rootDirectory.listFiles(); for(int i=0;i<rootDirectoryList.length;i++){ File File = new File(rootDirectoryList[i].getAbsolutePath()); System.out.println(File.getName()+":"); BufferedReader br = new BufferedReader(new FileReader(xmlFile.getAbsolutePath())); String zeile; try{ while((zeile = br.readLine()) != null){ System.out.println(zeile); } }catch(IOException e){ e.printStackTrace(); } } }catch(FileNotFoundException e1){ e1.printStackTrace(); } Wie ihr seht, ist das ein einfacher Ordner, aber wie geht das nun mit einem ZIP-Archiv. Danke :confused: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 22. Januar 2009 Teilen Geschrieben 22. Januar 2009 Du müsstest entsprechenden Zip-Algorithmus in Deinem Code nachbauen und eben die Informationen aus dem ZIP lesen bzw eine externe Komponente einsetzen. Siehe http://java.sun.com/j2se/1.4.2/docs/api/java/util/zip/package-summary.html Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Huecheln Geschrieben 27. Januar 2009 Autor Teilen Geschrieben 27. Januar 2009 So hab mich mal versucht. WEnn ich nun aber versuche den Inhalt aus zipEntryFile zu bekommen geht das nicht. Kann mir einer weiter helfen ? public boolean[] controlXML(File pPatch, File zip,boolean[] bZipOK,Logger mLog){ if(bBool[0]){ try{ ZipFile zipFile = new ZipFile(zip.getAbsolutePath()); for(Enumeration<? extends ZipEntry> entries = zipFile.entries();entries.hasMoreElements(){ File zipEntryFile = new File(((ZipEntry)entries.nextElement()).getName()); if(zipEntryFile.getName().equalsIgnoreCase(nameDummy)){ bBool[2] = true; mLog.debug("XML-Datei : "+zipEntryFile.getName()); } } }catch(Exception ex){ mLog.error("Eine Exception ist aufgetreten: "+ex.getMessage()); ex.printStackTrace(); System.exit(0); } } return bBool; } [/code] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 27. Januar 2009 Teilen Geschrieben 27. Januar 2009 [...]geht das nicht. das is ja eine schöne fehlerbeschreibung. Kann mir einer weiter helfen ? klar. die exception ist dafür da, im fehlerfall geworfen zu werden. wenn du die allerdings nicht postet, wird eine fehlersuche schwer bis unmöglich. die sinnhaftigkeit der verwendung des bBool sowie der dummyvariable erschliesst sich mir ebenfalls auf den ersten blick nicht. s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Huecheln Geschrieben 28. Januar 2009 Autor Teilen Geschrieben 28. Januar 2009 das is ja eine schöne fehlerbeschreibung. klar. die exception ist dafür da, im fehlerfall geworfen zu werden. wenn du die allerdings nicht postet, wird eine fehlersuche schwer bis unmöglich. die sinnhaftigkeit der verwendung des bBool sowie der dummyvariable erschliesst sich mir ebenfalls auf den ersten blick nicht. s'Amstel Eine Exception habe ich ja noch nicht. Die Variabel bBool ist nur um sie auf true zu setzen, wenn die richtige Datei gefunden wurde und die dummyvariable ist ein Namen Dummy, da alle gesuchten Dateien nach dem selben Muster aufgebaut sind und so vergleiche ich, ob es sich auch wirklich um die gesuchte Datei handelt. Um den Inhalt aus der gefundenen Datei dann zu bekommen, habe ich es versucht wie ganz oben. Dann kommt aber die Meldung, dass die Datei nicht existiert. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Huecheln Geschrieben 28. Januar 2009 Autor Teilen Geschrieben 28. Januar 2009 Hab noch mal den Quellcode mit dem Teil, der nicht funktioniert. Also das auskommentierte funktioniert nicht. public boolean[] controlXML(File pPatch, File zip,boolean[] bZipOK,Logger mLog){ if(bBool[0]){ try{ ZipFile zipFile = new ZipFile(zip.getAbsolutePath()); String nameDummy; for(Enumeration<? extends ZipEntry> entries = zipFile.entries();entries.hasMoreElements(){ File zipEntryFile = new File(((ZipEntry)entries.nextElement()).getName()); if(zipEntryFile.getName().equalsIgnoreCase(nameDummy)){ bBool[2] = true; mLog.debug("XML-Datei : "+zipEntryFile.getName()); /* BufferedReader br = new BufferedReader(new FileReader(zipEntryFile.getAbsolutePath())); String zeile; while((zeile=br.readLine()) != null){ System.out.println(zeile); } */ } } }catch(Exception ex){ mLog.error("Eine Exception ist aufgetreten: "+ex.getMessage()); ex.printStackTrace(); System.exit(0); } } return bZipOK; } [/code] Fehlermeldung: java.io.FileNotFoundException: ... (Das System kann den angegebenen Pfad nicht finden) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LadyPreis Geschrieben 28. Januar 2009 Teilen Geschrieben 28. Januar 2009 BufferedReader br = new BufferedReader(new FileReader(zipEntryFile.getAbsolutePath())); String zeile; while((zeile=br.readLine()) != null){ System.out.println(zeile); } ganz banal: Schonmal überprüft, ob der Pfad korrekt ist? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Huecheln Geschrieben 28. Januar 2009 Autor Teilen Geschrieben 28. Januar 2009 ganz banal: Schonmal überprüft, ob der Pfad korrekt ist? Jop hatte ich vorher schon mal gemacht. Da kommt dann der Pfad des Projektes. Aber was meint der damit? Entpackt der die Datei dahin oder wie? Was muss ich an dem Code ändern? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ksg9-sebastian Geschrieben 29. Januar 2009 Teilen Geschrieben 29. Januar 2009 (bearbeitet) Wie kommst du drauf aus einem Namen eines ZIP-Eintrags (z.B: eine Datei aus dem Archiv) ein File zu machen und dann zu erwarten dass der Pfad stimmt? Du musst über die ZIP-Entries iterieren (das tust du ja mit der Enumeration) und dann kannst du dir an jedem ZIP-Entry einen InputStream für dieses eine Entry holen und dann kannst du damit nen BufferedReader bauen. Allerdings erschließt sich mir der Sinn nicht so ganz eine Datei mit nem BufferedReader (Character-Stream) zu lesen. Sind das nur Textdateien? ** edit ** Ach ja, www.google.de mit "java zip extract files" liefert schon die erstren 20 brauchbaren Codesnippets.. Bearbeitet 29. Januar 2009 von ksg9-sebastian edit halt :) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Huecheln Geschrieben 29. Januar 2009 Autor Teilen Geschrieben 29. Januar 2009 (bearbeitet) Allerdings erschließt sich mir der Sinn nicht so ganz eine Datei mit nem BufferedReader (Character-Stream) zu lesen. Sind das nur Textdateien? Ja, das sind ganz einfache textdateien, die ich zeile für zeile ausgeben möchte. ich möchte auch nicht jede datei in dem Zip Verzeichnis ausgeben, sondern nur bestimmte. aber mir geht es jetzt erstmal darum, überhaupt die zeilen aus der gezippten Textdatei zu bekommen. Das ich die richtige Datei finden kann, funktioniert ja schon (siehe oben), aber dann möchte ich diese Datei dann Zeile für Zeile ausgeben. Bearbeitet 29. Januar 2009 von Huecheln Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kingofbrain Geschrieben 29. Januar 2009 Teilen Geschrieben 29. Januar 2009 Dann machs doch so, wie ksg9-sebastian beschrieben hat. Besorg Dir über Dein ZipFile den InputStream eines ZipEntry, und les den aus. -> ZipFile#getInputStream(ZipEntry) Peter Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Huecheln Geschrieben 29. Januar 2009 Autor Teilen Geschrieben 29. Januar 2009 (bearbeitet) Dann machs doch so, wie ksg9-sebastian beschrieben hat. Besorg Dir über Dein ZipFile den InputStream eines ZipEntry, und les den aus. -> ZipFile#getInputStream(ZipEntry) Peter So hab das mit dem getInputStream gemacht. aber wie baue ich das jetzt in den BufferedReader ein? public boolean[] controlXML(File pPatch, File zip,boolean[] bZipOK,Logger mLog){ if(bZipOK[0]){ try{ ZipFile zipFile = new ZipFile(zip.getAbsolutePath()); for(Enumeration<? extends ZipEntry> entries = zipFile.entries();entries.hasMoreElements(){ ZipEntry entry = new ZipEntry(entries.nextElement().getName()); if(entry.getName().equalsIgnoreCase(xmlNameDummy)){ bZipOK[2] = true; // Hier mit getInputStream InputStream test = zipFile.getInputStream(entry); // Und jetzt? } } }catch(Exception ex){ mLog.error("Eine Exception ist aufgetreten: "+ex.getMessage()); ex.printStackTrace(); System.exit(0); } } return bZipOK; } [/code] Sorry, aber ich konnte mit den Beispielen auf anderen Seiten nichts anfangen und ich arbeite mich noch in Java ein. Bearbeitet 29. Januar 2009 von Huecheln Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Huecheln Geschrieben 29. Januar 2009 Autor Teilen Geschrieben 29. Januar 2009 OK, hab die Lösung gefunden: new BufferedReader(new InputStreamReader(/*mein InputStream*/)); :upps Dank für eure Hilfe. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ksg9-sebastian Geschrieben 2. Februar 2009 Teilen Geschrieben 2. Februar 2009 Wenn du schon bei Grundlagen bist: public boolean[] controlXML(File pPatch, File zip,boolean[] bZipOK,Logger mLog){ Warum übergibst du nen Logger? Logger werden in Normalfall entweder static final deklariert: class TestKlasse{ private static final Logger LOGGER = Logger.getLogger(TestKlasse.class); } oder über statische Methoden gekapselt class Logger{ public static void info(Class caller, Strng message){ Logger.getLogger(caller).info(message); } } Aber einen Logger per Parameter zu übergeben tut man nicht! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.