Раньше в нашем веб-приложении было несколько zip-файлов. Мы хотели бы вырезать определенный текстовый документ в zip-файле. Это не было проблемой:
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
}
Однако мы переместили эти zip-файлы в другой модуль и хотим упаковать их в jar. К сожалению, создать ZipFile
теперь не удается. Я могу получить InputStream
для zip: но у меня нет способа получить входной поток для самой записи.
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();
}
но у меня нет способа получить входной поток для самой записи. Я попытался найти длину записи и получить следующие n байтов из ZipInputStream
, но у меня это не сработало. Казалось, что все прочитанные байты были 0.
Есть ли способ обойти это или мне придется переместить zip-файлы обратно в основной проект?