Apache AntパッケージによるZIPファイル圧縮


Apache AntパッケージによるZIPファイル圧縮
数年前からこのような業務に遭遇し、ZIP標準圧縮ファイルを解凍したことがある.前に書いた操作クラスが見つかりませんでしたが、最近プロジェクトでこのような業務を処理しなければならないので、書き直しました.Javaは、ZIPパケットを処理するAPIを提供する.しかし、中国語のサポートはあまりよくないので、Apache AntのZIPでAPIを操作して処理します.ANTのAPIは中国語サポートの問題を解決し、使いやすいです.以下は操作クラスです.
以下のクラスはApacheの機能のほんの一部にすぎません.詳細については、ドキュメントを参照してください.ここではあまり説明しません.
*プロジェクトにApacheのant.jarパッケージをLibにインポートします.
/*
  * All rights reserved.
 * @author: JODY
 * @Date: 2008-05-27
 * @Time: 0:15:04
 */
package cn.com.jody.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;

import org.apache.tools.zip.ZipEntry;

/*
 * <p>
 *        ZIP     <br>
 *       、   <br>
 *        
 * </p>
 *     :ExtractZIP.java<br>
 *     :ExtractZIP<br>
 * @author: JODY
 */
public class ExtractZIP {
	
	public ExtractZIP(){
		
	}
	/**
	 *       
	 * @param zipFileName
	 * @param outputDirectory
	 * @throws Exception
	 */
	public static void extract(String zipFileName,String outputDirectory) throws Exception{
		try {
			org.apache.tools.zip.ZipFile zipFile = new org.apache.tools.zip.ZipFile(zipFileName);
			java.util.Enumeration e = zipFile.getEntries();

			org.apache.tools.zip.ZipEntry zipEntry = null;

			while (e.hasMoreElements()){
				zipEntry = (ZipEntry)e.nextElement();
				//System.out.println("unziping "+zipEntry.getName());
				if (zipEntry.isDirectory()){
					String name=zipEntry.getName();
					name=name.substring(0,name.length()-1);		
					mkDirs(outputDirectory+File.separator+name);					
					//System.out.println("    :"+outputDirectory+File.separator+name);

				}else{
					String name=zipEntry.getName();
					String dir = name.substring(0,name.lastIndexOf("/"));
					mkDirs(outputDirectory+File.separator+dir);					
					//System.out.println("    :"+outputDirectory+File.separator+name);					
					File f=new File(outputDirectory+File.separator+zipEntry.getName());
					f.createNewFile();
					InputStream in = zipFile.getInputStream(zipEntry);
					FileOutputStream out=new FileOutputStream(f);					
					int c;
					byte[] by=new byte[1024];
					while((c=in.read(by)) != -1){
						out.write(by,0,c);
					}
					out.close();
					in.close();
				}
			}
		}
		catch (Exception ex){
			System.out.println("      "+ex.getMessage());
			ex.printStackTrace();
		}
	}
	/**
	 *     ,     
	 * @param dir
	 * @throws Exception
	 */
	private static void mkDirs(String dir) throws Exception{
		if(dir == null || dir.equals("")) return;
		File f1 = new File(dir);
		if(!f1.exists())
			f1.mkdirs();
	}	


	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			extract("D:\\    \\apache\\     .zip", "D:\\    \\apache\\aa");
		} catch (Exception e) {			
			e.printStackTrace();
		}
	}

}

 以上のコードはテストに合格し、中国語のディレクトリ、ファイル名をサポートし、ディレクトリレベルに限らない.