Zipinputstream
からZipoutputstream
にZipをコピーしようとしました。Java:ZipinputstreamからZipoutputstreamへ「中央ディレクトリ終端署名が見つかりません」エラー
ジップを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();
なぜですか?バイトをコピーするだけです。あなたはこの合併症のすべてを必要としません。 – EJP
私は後でzipを編集する必要があるので(新しいファイルを置いて、削除するなど)、普通のコピーがうまくいけば、それを編集することはできません。 – Sue