6

Zip を a から a にコピーしようとしてZipinputstreamZipoutputstreamます。

Zipをbyte[]Oracleデータベースのように保存します。私Zipinputstreamはzipを解凍するために使用し(後でZipを編集したい)、それをに入れてZipoutputstream新しいものを取得し、byte[]この配列を使用して後でServletOutputStream. 新しいファイルを作成すると-なしでZipinputstream-動作します。しかし、使用するZipinputstreamとエラーが発生します。

これが私のコードです:

        ZipInputStream zipInputStream = new ZipInputStream(new ByteArrayInputStream(fileFromDataBase),
                Charset.forName("UTF-8"));
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        ZipOutputStream zos = new ZipOutputStream(byteArrayOutputStream, Charset.forName("UTF-8"));
        ZipEntry currentEntry;
        byte[] buffer = new byte[8192];
        while ((currentEntry = zipInputStream.getNextEntry()) != null) {
            ZipEntry newEntry = new ZipEntry(currentEntry.getName());
            zos.putNextEntry(newEntry);
            int length;
            while ((length = zipInputStream.read(buffer)) > 0) {
                zos.write(buffer, 0, length);
            }
            zos.closeEntry();                   
        }

        //TO Object to download later the Zipfile from html page
        paketDownloadTO = new PaketDownloadTO();
        paketDownloadTO.setData(byteArrayOutputStream.toByteArray());
        paketDownloadTO.setFileName(fileName);

        zos.finish();
        zipInputStream.close();
        zos.close();
4

1 に答える 1

8

私の推測では、あなたはzos.close()前にするべきですbyteArrayOutputStream.close()

アップデート:

そして移動します:

paketDownloadTO = new PaketDownloadTO();
paketDownloadTO.setData(byteArrayOutputStream.toByteArray());
paketDownloadTO.setFileName(fileName);

zos.close();

于 2016-12-02T08:55:45.427 に答える