Чтение zip-файла внутри jar-файла

Раньше в нашем веб-приложении было несколько 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-файлы обратно в основной проект?

8
задан ajduke 23 July 2013 в 06:11
поделиться