Pregunta

Estamos tratando de modificar uno de los archivos XML en 2007 MS Excel. Para ello, el xlsx está siendo descomprimido usando ZipInputStream de Java y luego se copia en un nuevo archivo Zip utilizando ZipOutputStream. Los fragmentos de código son las siguientes:

        FileInputStream fis = new FileInputStream("C:\\_132139TRD-GDR_Conversion.xlsx");
        ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));

        FileOutputStream fos =  new FileOutputStream("C:\\_132139TRD-GDR_Conversion123.xlsx");
        ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(fos));

        while ((entry = zis.getNextEntry()) != null) {

            System.out.println("Processing Entry : " + entry.getName());
            System.out.println("Processing Entry Size : " + entry.getSize());
            System.out.println("Entry Available : " + zis.available());

        if(entry.getName().equals(ZIP_ENTRY_WOOKBOOK_XML)){
          //Process XML
        }

        ZipEntry ze = new ZipEntry(entry.getName());
            zos.putNextEntry(ze);
            if(entry.getName().equals(ZIP_ENTRY_WOOKBOOK_XML)){
                    zos.write(XML.getBytes());
            }else{
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                while ((count = zis.read(data, 0, BUFFER)) != -1) {
                    stream.write(data, 0, count);
                }
                tempBuffer = stream.toByteArray();
                zos.write(tempBuffer);
            }
            zos.closeEntry();               
        }
        zos.close();
        fos.close();
        zis.close();
        fis.close();

En este fragmento, después nos encontramos con un archivo JPEG, la "entrada = zis.getNextEntry ()" devuelve un valor nulo. No somos capaces de leer la siguiente ZipEntry - que conduce a un Excel incompleta. La salida de un archivo de Excel muestra es la siguiente:

Start Date Mon Dec 06 15:33:33 IST 2010
Processing Entry : xl/media/Logo2005_JPM_A_Black_170x50.jpeg
Processing Entry Size : -1
Entry Available : 1
End Date Mon Dec 06 15:34:58 IST 2010

El ZipInputStream se cierra tan pronto como el archivo JPEG se copia. (Variables de entryEOF y reachEOF tanto se vuelven verdad y la entrada es nula después de copiar la imagen).

se ha enfrentado a nadie un problema similar? Es un error que reachEOF también resulta cierto después de copiar el archivo?

Midhun.

¿Fue útil?

Solución

Esto se debe a que lea los datos de la imagen de zis en lugar de desde zis.getInputStream(entry).

Después de que el bucle de copia, todos los datos de zis habrán sido leídos, para que pueda obtener un EOF.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top