Java ZipinputStream закрывается после прочтения наживления изображений

StackOverflow https://stackoverflow.com/questions/4365531

  •  09-10-2019
  •  | 
  •  

Вопрос

Мы пытаемся изменить один из файлов XML в 2007 году MS Excel. Для этого файл XLSX расстегнут с использованием ZipinputStream Java, а затем скопировал в новый zip-файл с использованием zipoutputtream. Фрагменты кода, как показано ниже:

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

В этом фрагменте после того, как мы столкнулись с файлом JPEG, «запись = zis.getnextentry ()» возвращает NULL. Мы не можем прочитать следующую поддержку zipentry - что приводит к неполной Excel. Выход для образца файла Excel как ниже:

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

ZipinPutStream закрывается, как только файл JPEG копируется. (WhoineOF и REACHEOF PRITALBLES Оба поворота, так и вход - это NULL после копирования изображения).

Кто-нибудь столкнулся с подобной проблемой? Это ошибка, которую REACHEOF также превращается в True после копирования файла?

Мидхун.

Это было полезно?

Решение

Это потому, что вы читаете данные для изображения из zis вместо от zis.getInputStream(entry).

После копирования петли все данные из zis будет читаться, поэтому вы получите EOF.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top