opo 发表于 2017-1-13 06:08:11

org.apache.tools.zip包解决java.util.zip包中文问题

  使用java自带的类java.util.zip进行文件/目录的压缩的话,有一点不足,不支持中文的文件/目录命名,如果有中文名,那么打包就会失败。在Ant.jar类库中也有zip类,引入org.apache.tools.zip.*,能够解决不支持中文文件目录的问题,同时,Ant的获得途径也比较多,一般的应用服务器中有这个包,如果没有去下载个tomcat5.X,里面也有ant.jar,可以使用。   
  例子如下:
  
java 代码
 

[*]import java.io.File;  
[*]import org.apache.tools.zip.ZipOutputStream;  
[*]import java.io.FileInputStream;  
[*]import java.io.FileOutputStream;  
[*]  
[*]public class CompressBook {      
[*]    public CompressBook() {          
[*]    }  
[*]  
[*]public void zip(String inputFileName) throws Exception {       
[*]    String zipFileName="c:\\test.zip";//打包后文件名字  
[*]    System.out.println(zipFileName);  
[*]    zip(zipFileName, new File(inputFileName));    
[*]      
[*]    }  
[*]  
[*] private void zip(String zipFileName, File inputFile)  
[*] throws Exception {  
[*]   ZipOutputStream out = new ZipOutputStream(  
[*]new FileOutputStream(zipFileName));  
[*]   zip(out, inputFile, "");  
[*]   System.out.println("zip done");  
[*]   out.close();  
[*] }  
[*]  
[*] private void zip(ZipOutputStream out, File f, String base)  
[*] throws Exception {  
[*]   if (f.isDirectory()) {  
[*]     File[] fl = f.listFiles();  
[*]     out.putNextEntry(new org.apache.tools.zip.ZipEntry(base + "/"));  
[*]     base = base.length() == 0 ? "" : base + "/";  
[*]     for (int i = 0; i < fl.length; i++) {  
[*]       zip(out, fl, base + fl.getName());  
[*]     }  
[*]   }  
[*]   else {  
[*]     out.putNextEntry(new org.apache.tools.zip.ZipEntry(base));  
[*]     FileInputStream in = new FileInputStream(f);  
[*]     int b;  
[*]     System.out.println(base);  
[*]     while ( (b = in.read()) != -1) {  
[*]       out.write(b);  
[*]     }  
[*]     in.close();  
[*]   }  
[*] }  
[*]}  
页: [1]
查看完整版本: org.apache.tools.zip包解决java.util.zip包中文问题