私は、Javaのメカニズムを使用してzipファイルを解凍しています。タイトルにアクセントを付けたファイルがない場合、この仕組みは正常に機能します。私はポルトガル出身ですから、私の言語では、ç、ç、õ、éなどの文字が通常使用されています。この文字のいずれかがファイル名にある場合、IO例外が発生します。それはwhile((currentByte = is.read(data, 0, BUFFER)) != -1)
アクセント付きのzipファイルの解凍
java.io.IOException: Stream closed
at java.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:134)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
at parsers.ZipParser.decompressZipFile(ZipParser.java:83)
at poc.MainPOC.main(MainPOC.java:61)
にクラッシュ
while (zipFileEntries.hasMoreElements()) {
ZipEntry entry = (ZipEntry) zipFileEntries.nextElement();
File destFile = new File(unzipDestinationDirectory, currentEntry);
File destinationParent = destFile.getParentFile();
// create the parent directory structure if needed
destinationParent.mkdirs();
// extract file if not a directory
if (!entry.isDirectory()) {
BufferedInputStream is =
new BufferedInputStream(zip_file.getInputStream(entry));
int currentByte;
byte data[] = new byte[BUFFER];
// write the current file to disk
FileOutputStream fos = new FileOutputStream(destFile);
BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER);
// read and write until last byte is encountered
while ((currentByte = is.read(data, 0, BUFFER)) != -1) {
dest.write(data, 0, currentByte);
}
dest.flush();
dest.close();
is.close();
}
は、あなたがこの問題に対処するための任意の回避策を知っていますか?圧縮解除せずにzip内のファイルのファイル名を変更することはできますか?
私は入力zipファイルの作成責任者ではありません。私はzipファイルがどのように作成されるかに影響しません... – nunoaac
あなたはその影響を見つけなければならない、またはうまくいかないでしょう。おそらく、あなたはそれらを作成しているパートナーと会話をする必要があります。 – duffymo
これは本当にオプションではありません:/私はApache Commons IO libでjava.util.zipを置き換えます。 – nunoaac