java实现文件压缩与解压缩(支持中文)

java 代码
  1. import java.io.*;   
  2. import java.util.*;   
  3. import org.apache.tools.zip.*;   
  4.   
  5.   
  6. /**  
  7.          * added by czl  
  8.          * 2007-06-05  
  9.          * 压缩文件,支持中文路径及中文文件名  
  10.          * compressFileName(指定压缩后的文件及路径):path+"/tempfile/test.zip"  
  11.          * args(所要压缩的文件):String args[]={path+"/tempfile/download_123.txt",path+"/tempfile/download_456.txt",path+"/tempfile/download_789.txt"}  
  12.          */  
  13.            
  14.         public static boolean createZip(String compressFileName,String args[]){   
  15.             boolean flag = false;   
  16.             try{           
  17.                 byte b[] = new byte[512];      
  18.                 ZipOutputStream zout = new ZipOutputStream(new FileOutputStream(compressFileName));      
  19.                 for(int i = 0; i < args.length; i++){      
  20.                    InputStream in = new FileInputStream(args[i]);    
  21.                    File file=new File(args[i]);   
  22.                    String filename = file.getName();//取得文件名   
  23. //                 ZipEntry e = new ZipEntry(args[i].replace(File.separatorChar,'/')); //压缩后带路径    
  24.                    ZipEntry e = new ZipEntry(filename);         //压缩后不带路径   
  25.                    zout.putNextEntry(e);      
  26.                    int len=0;   
  27.                    while((len=in.read(b)) != -1){   
  28.                       zout.write(b,0,len);   
  29.                    }   
  30.                    zout.closeEntry();               
  31.                  }   
  32.                  zout.close();   
  33.                  flag = true;   
  34.             }catch(Exception e){   
  35.                 e.printStackTrace();   
  36.             }   
  37.             return flag;   
  38.         }   
  39.         /**  
  40.          * added by czl   
  41.          * 2007-06-05  
  42.          * 解zip压缩文件,支持中文路径及中文文件名  
  43.          * @param zipFile  
  44.          * @param outFilePath  
  45.          * @param mode  
  46.          */  
  47.         public static boolean unZip(String zipFile,String outFilePath,int mode){   
  48.             boolean flag = false;   
  49.             try{   
  50.               File file = new File(zipFile);   
  51.               String fileName = file.getName();   
  52.               if(mode == 1)   
  53.               {   
  54.                   outFilePath += File.separator;  //文件当前路径下   
  55.               }else{   
  56.                   outFilePath += File.separator+fileName.substring(0,fileName.length()-4)+File.separator;   
  57.               }   
  58.               File tmpFileDir = new File(outFilePath);   
  59.               tmpFileDir.mkdirs();   
  60.                  
  61.               ZipFile zf = new ZipFile(zipFile);   
  62.               FileOutputStream fos;   
  63.                  
  64.               byte[] buf = new byte[1024];   
  65.               for(Enumeration em = zf.getEntries(); em.hasMoreElements();){   
  66.                    ZipEntry ze = (ZipEntry) em.nextElement();   
  67.                    if(ze.isDirectory())   
  68.                    {   
  69.                        continue;   
  70.                    }   
  71.                    DataInputStream dis = new DataInputStream(zf.getInputStream(ze) );   
  72.                    String currentFileName = ze.getName();   
  73.                    int dex = currentFileName.lastIndexOf('/');   
  74.                    String currentoutFilePath = outFilePath;   
  75.                    if(dex > 0)   
  76.                    {   
  77.                         currentoutFilePath += currentFileName.substring(0,dex)+File.separator;   
  78.                         File currentFileDir = new File(currentoutFilePath);   
  79.                         currentFileDir.mkdirs();                       
  80.                    }                  
  81.                    fos = new FileOutputStream(outFilePath + ze.getName ( ));   
  82.                    int readLen = 0;   
  83.                    while((readLen = dis.read(buf,0,1024)) > 0 )   
  84.                    {   
  85.                     fos.write(buf , 0 ,readLen);   
  86.                    }   
  87.                    dis.close();   
  88.                    fos.close();                   
  89.                }   
  90.                flag = true;   
  91.              }catch(Exception e){   
  92.                  e.printStackTrace();   
  93.              }   
  94.              return flag;   
  95.         }   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java实现压缩解压缩ZIP   import java.io.BufferedInputStream;   import java.io.BufferedOutputStream;   import java.io.File;   import java.io.FileInputStream;   import java.io.FileOutputStream;   import java.util.zip.ZipEntry;   import java.util.zip.ZipOutputStream;   public class Zip {   static final int BUFFER = 2048;   public static void main(String argv[]) {   try {   BufferedInputStream origin = null;   FileOutputStream dest = new FileOutputStream("E:\\test\\myfiles.zip");   ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(   dest));   byte data[] = new byte[BUFFER];   File f = new File("e:\\test\\a\\");   File files[] = f.listFiles();   for (int i = 0; i < files.length; i++) {   FileInputStream fi = new FileInputStream(files[i]);   origin = new BufferedInputStream(fi, BUFFER);   ZipEntry entry = new ZipEntry(files[i].getName());   out.putNextEntry(entry);   int count;   while ((count = origin.read(data, 0, BUFFER)) != -1) {   out.write(data, 0, count);   }   origin.close();   }   out.close();   } catch (Exception e) {   e.printStackTrace();   }   }   }   解压缩的   import java.io.BufferedInputStream;   import java.io.BufferedOutputStream;   import java.io.File;   import java.io.FileOutputStream;   import java.util.Enumeration;   import java.util.zip.ZipEntry;   import java.util.zip.ZipFile;   public class UnZip {   static final int BUFFER = 2048;   public static void main(String argv[]) {   try {   String fileName = "E:\\test\\myfiles.zip";   String filePath = "E:\\test\\";   ZipFile zipFile = new ZipFile(fileName);   Enumeration emu = zipFile.entries();   int i=0;   while(emu.hasMoreElements()){   ZipEntry entry = (ZipEntry)emu.nextElement();   //会把目录作为一个file读出一次,所以只建立目录就可以,之下的文件还会被迭代到。   if (entry.isDirectory())   {   new File(filePath + entry.getName()).mkdirs();   continue;   }   BufferedInputStream bis = new BufferedInputStream(zipFile.getInputStream(entry));   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值