Frage

Wir versuchen, eine der XML-Dateien in MS Excel 2007 zu ändern. Dazu wird die xlsx-Datei entpackt werden Java ZipInputStream und anschließend auf eine neue Zip-Datei kopiert mit ZipOutputStream. Die Code-Schnipsel sind wie folgt:

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

In diesem Code-Schnipsel, nachdem wir eine JPEG-Datei auftreten, die "entry = zis.getNextEntry ()" NULL zurück. Wir sind nicht in der Lage, die nächste ZipEntry zu lesen - was zu einer unvollständigen Excel. Die Ausgabe für eine Probe Excel-Datei ist wie folgt:

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

Die ZipInputStream wird, sobald die JPEG geschlossen Datei kopiert wird. (EntryEOF und reachEOF Variablen schalten beide wahr und der Eintritt ist null nach dem Bild zu kopieren).

Hat jemand ein ähnliches Problem konfrontiert? Ist es ein Fehler, dass reachEOF schaltet sich auch wahr, nach dem Kopieren der Datei?

Midhun.

War es hilfreich?

Lösung

This is because you read the data for the image from zis instead of from zis.getInputStream(entry).

After the copy loop, all data from zis will have been read, so you get an EOF.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top