読者です 読者をやめる 読者になる 読者になる

tohokuaikiのチラシの裏

技術的ネタとか。

Confluenceのプラグイン開発を承ります。ご連絡はこちらのホームページからお願いいたします。

JavaでZIPファイルの一覧を取得しようとしたら日本語ファイル名が文字化けしたので悩んだ件

java

原因

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を使う」の方はエラー出てそもそもダメだった。