Подтвердить что ты не робот

Как создать входной поток из ZipEntry

У меня есть класс, который обертывает ZipEntrys, но я изо всех сил пытаюсь понять, как я мог бы написать метод, который возвращает поток ввода из любого ZipEntry. Мне удалось написать что-то, что могло бы вернуть массив входных потоков для ZipFile, но мне нужен способ получить входной поток только из одного ZipEntry.

4b9b3361

Ответ 1

У вас нет экземпляра ZipFile, из которого был получен ZipEntry? Если вы это сделаете, вы можете использовать ZipFile.getInputStream(ZipEntry).

https://docs.oracle.com/javase/8/docs/api/java/util/zip/ZipFile.html

PS. Просто быстро просмотрел код, а ZipEntry не является оберткой для базовых данных в zip файле. Это просто "владелец места" для записи, насколько я могу видеть (т.е. Заархивированные атрибуты файла, а не данные). Фактический поток создается через вызов JNI в классе ZipFile. Это означает, что я не верю, что вы можете делать то, что вы хотите сделать практическим способом.

Ответ 2

Как насчет этого?

ZipFile zipFile = new ZipFile("file.zip");
ZipEntry zipEntry = zipFile.getEntry("fileName.txt");       
InputStream inputStream = zipFile.getInputStream(zipEntry);

Ответ 3

 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();
    }

Он был найден здесь:
getInputStream для ZipEntry из ZipInputStream (без использования класса ZipFile)

Непонимание в том, что представляет собой входной поток, который открывается из zip файла. Решение: открыть поток ввода из zip файла ZipInputStream zipInputStream = ZipInputStream(new FileInputStream(zipfile), запустить цикл zipInputStream.getNextEntry(). Для каждого раунда у вас есть входной поток для текущей записи (ранее открыт для zip файла); ..