JAva圧縮ファイルant.jar中国語の文字化けしを解決


JAva圧縮ファイル、ネット上でいくつか例を探して、ただ1つのファイルを圧縮するだけのようで、ディレクトリの下のすべてのファイルに対して圧縮するのはだめで、その上javaの持参するZipで圧縮する時中国語の経路が文字化けして、その上符号化のフォーマットを設定することができなくて、それからまた引き続き調べて、apacheのant.jarで中国語の経路の文字化けして、その上また符号化を設定することができます(ZipOutputStream. setEncoding(encoding)).
次はコード実装クラスです.主に指定したディレクトリの下のファイルを圧縮します(ソースファイルを圧縮して削除し、対応する行コードを注釈する必要はありません). 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;

public class Zip {
	/**       */
	public static File zipFile = null;
	/**           */
	public static File rootFile = null; 
	/**       */
	public static FileOutputStream fos = null;
	/**         */
	public static ZipOutputStream zos = null;
	/**
	 *        
	 */
	public static void close(){
		try {
			if(zos!=null){
				zos.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			if(fos!=null){
				fos.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 *          ,     ,          
	 * @param outPath      
	 */
	public static void init(String outPath){
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
		String dateDir = sdf.format(date);
		rootFile = new File(outPath);
		zipFile = new File("zip/"+dateDir+"update.zip");
		try {
			fos = new FileOutputStream(zipFile);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		zos = new ZipOutputStream(fos);
		
	}
	/**
	 *     ,  
	 * @param sourceFilePath      
	 */
	public static void pack(String sourceFilePath){
		/**     */
		File sourceFile = new File(sourceFilePath);
		/**    */
		File[] sourceFiles = sourceFile.listFiles();
		/**     */
		FileInputStream fis = null;
		byte[] buf = new byte[1024];
		for (int i = 0; i < sourceFiles.length; i++) {
			//   ZIP  ,       
			if(sourceFiles[i].isDirectory()){		//    
				pack(sourceFiles[i].getAbsolutePath());	//       
				//sourceFiles[i].delete();
			}else{									//   ,    ,    
				String zipPath = sourceFiles[i].getAbsolutePath().replace(
						rootFile.getAbsolutePath()+System.getProperty("file.separator"),"");
				ZipEntry zipEntry = new ZipEntry(zipPath);
				System.out.println("    -->"+zipEntry.getName());
				try {
					//    
					zos.putNextEntry(zipEntry);
					//                
					fis = new FileInputStream(sourceFiles[i]);
					int read = 0;
					while ((read = fis.read(buf)) != -1) {
						//     
						zos.write(buf, 0, read);
					}
				} catch (IOException e) {
					e.printStackTrace();
				}finally{
					try {
						fis.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
					sourceFiles[i].delete();	//    -        ,         
				}
			}
		}
		sourceFile.delete();	//  ,      -        ,          
		
	}
	/**
	 *   
	 * @param args
	 */
	public static void main(String[] args) {
		//  outPath sourcePath      (    )
		String sourcePath = "G:/  ";
		String outPath = "E:/";
		//   
		Zip.init(outPath);
		//  
		Zip.pack(sourcePath);
		//   
		Zip.close();
	}
}

注意:ソースファイルのパスと圧縮パッケージのパスは同じではありません.プログラムは常に実行されます.
     ant.jar