Precedentemente avevamo alcuni file zip all'interno della nostra applicazione web. Vorremmo mettere un documento di testo specifico all'interno del file zip. Questo non era un problema:Lettura di un file zip all'interno di un file jar
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
}
Tuttavia ci siamo spostati questi file zip in un altro modulo e vogliamo loro pacchetto all'interno di un barattolo. Sfortunatamente, la creazione di ZipFile
non riesce. Posso ottenere un InputStream
per il file zip: ma non ho modo di ottenere un flusso di input per la voce stessa.
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();
}
ma non ho modo di ottenere un flusso di input per la voce stessa. Ho provato a trovare la lunghezza della voce e ottenere i successivi n byte dal ZipInputStream
ma questo non ha funzionato per me. Sembrava che tutti i byte letti fossero 0.
C'è un modo per aggirare questo o dovrò spostare i file zip nel progetto principale?
In realtà, è possibile utilizzare Class.getResourceAsStream e ZipInputStream di leggere quello esterno -scarica troppo. In questo modo, non è necessario sostituire il nome del file ad hoc e non fare affidamento sull'URL per l'accesso ai file. – helios