Zuvor hatten wir einige ZIP-Dateien in unserer Webanwendung. Wir möchten ein bestimmtes Textdokument in der Zip-Datei ablegen. Dies war kein Problem:Eine Zip-Datei in einer JAR-Datei lesen
URL url = getClass().getResource(zipfile);
ZipFile zip = new ZipFile(url.getFile().replaceAll("%20", " "));
Entry entry = zip.getEntry("file.txt");
InputStream is = zip.getInputStream(entry);
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = reader.readLine();
while (line != null) {
// do stuff
}
Allerdings haben wir diese Zip-Dateien in ein anderes Modul verschoben und möchten sie in einem Glas verpacken. Leider schlägt das Erstellen der ZipFile
jetzt fehl. Ich kann eine InputStream
für die ZIP bekommen: aber ich habe keine Möglichkeit, einen Input-Stream für den Eintrag selbst zu erhalten.
InputStream is = getClass().getResourceAsStream(zipfile);
ZipInputStream zis = new ZipInputStream(is);
ZipEntry entry = zis.getNextEntry();
while (entry != null && !entry.getName().equals("file.txt")) {
entry = zis.getNextEntry();
}
aber ich habe keine Möglichkeit, sich um einen Eingangsstrom für den Eintritt von zu bekommen. Ich habe versucht, die Länge des Eintrags zu finden und die nächsten n Bytes aus der ZipInputStream
zu bekommen, aber das hat nicht für mich funktioniert. Es schien, dass alle gelesenen Bytes 0 waren.
Gibt es einen Weg um dies oder muss ich die Zip-Dateien zurück in das Kernprojekt verschieben?
In der Tat können Sie Class.getResourceAsStream und ZipInputStream verwenden, um die äußere zu lesen -zip auch. Auf diese Weise brauchen Sie den Ad-hoc-Dateinamen nicht ersetzen und verlassen sich nicht auf URL für den Dateizugriff. – helios