Ich habe eine Klasse, die ZipEntrys umschließt, aber ich habe Mühe zu sehen, wie ich dann eine Methode schreiben könnte, die einen Eingabestream von einem ZipEntry zurückgibt. Ich habe es geschafft, etwas zu schreiben, das ein Array von Eingabestreams für eine Zip-Datei zurückgeben könnte, aber ich brauche einen Weg, um einen Eingabestream von nur einem ZipEntry zu erhalten.Wie erstelle ich einen Eingabestream von einem ZipEntry
Antwort
Haben Sie nicht die ZipFile-Instanz, von der der ZipEntry bezogen wurde? Wenn Sie das tun, können Sie ZipFile.getInputStream (ZipEntry) verwenden.
https://docs.oracle.com/javase/8/docs/api/java/util/zip/ZipFile.html
PS. Ich habe mir nur kurz den Code angeschaut und ein ZipEntry ist kein Wrapper für die zugrunde liegenden Daten in der Zip-Datei. Es ist nur ein "Platzhalter" für den Eintrag soweit ich sehen kann (d. H. Gezippte Dateiattribute, nicht die Daten). Der tatsächliche Stream wird durch einen JNI-Aufruf in der ZipFile-Klasse erstellt. Das bedeutet, dass ich nicht glaube, dass Sie tun können, was Sie auf praktische Weise tun wollen.
Malcolm, Danke für die Hilfe, Ich habe gerade diese Methode gefunden. Mein Problem ist jetzt, dass der Code, der ursprünglich die Zip-Datei öffnet (wenn Sie ZipFile zip = new ZipFile ("path");), dann schließt es. Ich kann es stoppen, wenn ich will, aber ich frage mich - was sind die Konsequenzen, wenn man keine Reißverschlüsse schließt? Offensichtlich, wenn ich den close() Befehl lösche, hinterlasse ich eine Methode, damit der Benutzer sie später schließen kann, aber ich habe mich gefragt, was passieren würde, wenn der Benutzer vergessen würde - nur gierig auf Speicher? Ich weiß, es ist kein Wrapper für die Daten - was ich schreibe ist ein Wrapper für den Umgang mit Zip/Jar-Dateien. – Stephen
Es offen zu lassen fühlt sich nicht wie eine gute Idee für mich an. Ebenso, um die Verantwortung für das Schließen an den Benutzer Ihrer Lösung zu verschieben. Eine Option (möglicherweise - ich rate zu dem Problem, das Sie lösen) ist, den ZipEntry zu umbrechen und ein Handle auf die Zip-Datei in der Wrapping-Klasse einzufügen. Dies scheint ein wenig schwer, aber bedeutet, dass Sie öffnen können, schließen Sie einen Stream zu den umschlossenen Zip-Eintrag, wann immer Sie brauchen. –
Wie wäre es damit?
ZipFile zipFile = new ZipFile("file.zip");
ZipEntry zipEntry = zipFile.getEntry("fileName.txt");
InputStream inputStream = zipFile.getInputStream(zipEntry);
+1 für das Code-Snippet. –
Leider erstellt das Erstellen einer neuen Instanz von ZipFile Dateihandles in 1.4.2_12 –
static void printInputStream(File zip) throws IOException
{
ZipInputStream zin = new ZipInputStream(new FileInputStream(zip));
for (ZipEntry zipEntry;(zipEntry = zin.getNextEntry()) != null;)
{
System.out.println("reading zipEntry " + zipEntry.getName());
Scanner sc = new Scanner(zin);
while (sc.hasNextLine())
{
System.out.println(sc.nextLine());
}
System.out.println("reading " + zipEntry.getName() + " completed");
}
zin.close();
}
Es wurde hier gefunden:
getInputStream for a ZipEntry from ZipInputStream (without using the ZipFile class)
Misunderstanding in dem, was ist der Eingangsstrom, der von Zip-Datei geöffnet wird. Lösung: Öffnen Sie den Eingangsstrom aus der Zip-Datei ZipInputStream zipInputStream = ZipInputStream(new FileInputStream(zipfile)
, Laufzyklus zipInputStream.getNextEntry()
. Für jede Runde haben Sie den Eingangsstrom für den aktuellen Eintrag (zuvor für Zip-Datei geöffnet); ..
- 1. Wie kann ich einen Eingabestream von HSSFWorkbook erhalten Objekt
- 2. Wie umschließt man einen String in einem Eingabestream?
- 3. Dateitrennzeichen des Pfadnamens von ZipEntry?
- 4. Wie erstelle ich einen XmlNode aus einem Aufruf von XmlSerializer.Serialize?
- 5. Wie erstelle ich einen Kanal von einem anderen mit Wandlern?
- 6. iPhone | Wie erstelle ich einen eindeutigen Schlüssel von einem NSTimeInterval?
- 7. Wie erstelle ich einen Timer
- 8. Wie erstelle ich einen NSManagedObjectContext
- 9. Wie erstelle ich einen Thread?
- 10. Wie erstelle ich einen Metagrammar?
- 11. Wie erstelle ich einen Zeitplaner?
- 12. Wie benutze ich TextArea als EingabeStream
- 13. EingabeStream ohne einen try/catch-Block schließen?
- 14. Wie erstelle ich einen JSONP aus einem externen JSON-Feed?
- 15. Wie erstelle ich einen jQuery Preloader mit einem Prozentzähler?
- 16. Wie erstelle ich einen Ordner auf einem Server in Ruby?
- 17. ZipEntry in Datei
- 18. Wie erstelle ich einen Style in einem WPF UserControl?
- 19. Wie erstelle ich einen parametrisierten Typ aus einem Makro?
- 20. Wie erstelle ich einen App-Benutzer in einem Box-Konto?
- 21. MATLAB: Wie erstelle ich einen Kreis aus einem Bild
- 22. Wie erstelle ich einen Python-Satz mit nur einem Element?
- 23. Wie erstelle ich einen farbigen Rahmen auf einem PictureBox-Steuerelement?
- 24. Wie erstelle ich einen Tabellenalias in MySQL
- 25. Wie erstelle ich einen Ordner in Eclipse?
- 26. Wie erstelle ich einen noexcept Funktionszeiger?
- 27. Wie erstelle ich einen Ordner auf SdCard und wie kopiere ich Dateien von einem zum anderen
- 28. Wie erstelle ich einen Turnierplan in Ruby?
- 29. Wie erstelle ich einen neuen Benutzer in AD von SharePoint
- 30. Wie erstelle ich einen MEME-Algorithmus?
Blick auf: http://stackoverflow.com/questions/3233555/is-it-possible-to-get-a-zipentrys-inputstream-from-a-zipinputstream – diyism