zipentry tutorial read files example decompress java zip

tutorial - zipfile java



¿Cómo creo una secuencia de entrada desde un ZipEntry (3)

¿No tiene la instancia ZipFile de la que se originó ZipEntry? Si lo hace, podría usar ZipFile.getInputStream (ZipEntry).

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

PD. Solo eché un vistazo rápido al código y ZipEntry no es un contenedor para los datos subyacentes en el archivo zip. Es solo un "marcador de posición" para la entrada por lo que puedo ver (es decir, los atributos del archivo comprimido no son los datos). El flujo real se crea a través de una llamada JNI en la clase ZipFile. Lo que significa que no creo que puedas hacer lo que buscas hacer de una manera práctica.

Tengo una clase que envuelve ZipEntrys, pero me cuesta ver cómo podría escribir un método que devuelva un flujo de entrada desde cualquier ZipEntry. Logré escribir algo que podría devolver una matriz de flujos de entrada para un ZipFile, pero necesito una forma de obtener un flujo de entrada de una sola ZipEntry.


¿Qué tal esto?

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


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

Fue encontrado aquí:
getInputStream para un ZipEntry desde ZipInputStream (sin usar la clase ZipFile)

Malentendido en lo que es la secuencia de entrada que se abre desde el archivo zip. Solución: abra el flujo de entrada desde el archivo zip ZipInputStream zipInputStream = ZipInputStream(new FileInputStream(zipfile) , ejecute el ciclo zipInputStream.getNextEntry() . Para cada ronda tiene la corriente de entrada para la entrada actual (abierto para el archivo zip antes); ..