原因
java.util.zip.ZipFileは、ZIPファイルのファイル名がUTF-8であるとして処理される。
そこで、
Javaのマニアじゃない入門の「ZipFileクラスを使う」を使ったら日本語がダメになってしまった。*1
対策
java.util.zip.ZipFileではなく、org.apache.tools.zip.ZipFileを使う。
このClassはjava.util.zip.ZipFileとほぼ似てるので入れ替えが楽である。
元記事のコードを2か所だけ変更。
public void list( File aZipFile ){ //------------------------------- // ZIPファイルを読み込む //------------------------------- ZipFile zipFile = null; try { zipFile = new ZipFile( aZipFile, "Windows-31j"); } catch (ZipException e) { // ZIP形式ではないファイルだった e.printStackTrace(); return; } catch (IOException e) { // ファイルオープンエラー e.printStackTrace(); return; } //------------------------------- // zipファイル内の 一覧を取得する //------------------------------- Enumeration enumeration = zipFile.getEntries(); while( enumeration.hasMoreElements() ){ ZipEntry entry = ( ZipEntry )enumeration.nextElement(); // このエントリを表示する String name = entry.getName(); long bytes = entry.getSize(); System.out.println( name + ", " + bytes ); } }
*1:もう一つの「展開の時と同じくZipInputStreamを使う」の方はエラー出てそもそもダメだった。