MACユーザからのZIPファイルの解凍で文字化け(2)

http://d.hatena.ne.jp/a-san/20090820#p1
そのソースです。
エラー処理はいい加減です。

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;


public class AsanUnzip {
    void unzip(File zipfile, File outdir) throws ZipException, IOException {
        if (! outdir.exists()) {
            outdir.mkdirs();
        }
        ZipFile zip = new ZipFile(zipfile);
        for (Enumeration e=zip.entries(); e.hasMoreElements(); ) {
            ZipEntry entry = (ZipEntry) e.nextElement();
            System.out.println(entry.getName());
            File outfile = new File(outdir, entry.getName());
            if (entry.isDirectory()) {
                outfile.mkdirs();
                continue;
            }
            if (! outfile.getParentFile().exists()) {
                outfile.getParentFile().mkdirs();   
            }
            BufferedInputStream in = new BufferedInputStream(zip.getInputStream(entry));
            BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outfile));
            while (in.available() > 0) {
                byte[] bytes = new byte[4096];
                int len = in.read(bytes);
                out.write(bytes, 0, len);
            }
            in.close();
            out.close();
        }
    }
    public static void main(String[] args) throws ZipException, IOException {
        if (args.length != 2) {
            System.err.println("usage: AsanUnzip <zipfile> <outdir>");
            System.exit(-1);
        }
        File zipfile = new File(args[0]);
        File outdir = new File(args[1]);
        new AsanUnzip().unzip(zipfile, outdir);
    }
}