zip中国語のファイル名の圧縮(圧縮ファイルまたはフォルダの対応)


         zip    ,zip                ,          ,          ,  ant.jar    ,       ,                       ,      ant.jar
/**
 * 
 */
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;

/**
 * @author XL
 * 
 */
public class ZipUtil
{

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        zip("D:\\    \\ttt.zip","D:\\    \\0628");
    }

    /**
     *   java.util.zip.ZipOutputStream       ,
     *     org.apache.tools.zip.ZipOutputStream。
     */
    public static void zip(String zipFileName,String srcFileName)
    {
        try
        {     
            //          
            FileOutputStream f = new FileOutputStream(new File(zipFileName));

            CheckedOutputStream ch = new CheckedOutputStream(f, new CRC32());
            //   ZIP       
            ZipOutputStream zipOut = new ZipOutputStream(
                    new BufferedOutputStream(ch));
            //        
            zip(zipOut,srcFileName);
            //         
            zipOut.close();
        }
        catch (Exception e)
        {
            System.out.println(e);
        }
    }
    
    /**
     *   zip
     * @param zipOut
     * @param fileName
     * @throws IOException 2009-9-24
     */
    public static void zip(ZipOutputStream zipOut, String fileName) throws IOException
    {
        File srcFileName = new File(fileName);
        if (srcFileName.isDirectory())
        {
            //       ,       
            File[] files = srcFileName.listFiles();
            for (File file : files)
            {
                zip(zipOut,file.getAbsolutePath());
            }            
        }
        else
        {
            //          
            String encode = "ISO8859_1";
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    new FileInputStream(srcFileName), encode));
            //              
            ZipEntry entry = new ZipEntry(srcFileName.getName());
            zipOut.putNextEntry(entry);
            //           
            int nNumber;
            while ((nNumber = in.read()) != -1)
            {
                zipOut.write(nNumber);
            }
            in.close();
        }
    }
}