java 操作rar文件_Java操作zip压缩和解压缩文件工具类

1 importjava.io.File;2 importjava.io.FileInputStream;3 importjava.io.FileNotFoundException;4 importjava.io.FileOutputStream;5 importjava.io.IOException;6 importjava.io.InputStream;7 importjava.io.OutputStream;8 importjava.util.ArrayList;9 importjava.util.Enumeration;10 importjava.util.List;11

12 importorg.apache.tools.zip.ZipEntry;13 importorg.apache.tools.zip.ZipFile;14 importorg.apache.tools.zip.ZipOutputStream;15

16

17 /**

18 * 压缩或解压zip:19 * 由于直接使用java.util.zip工具包下的类,会出现中文乱码问题,所以使用ant.jar中的org.apache.tools.zip下的工具类20 *@authorAdministrator21 */

22

23 public classZipUtil {24 private static byte[] _byte = new byte[1024] ;25 /**

26 * 压缩文件或路径27 *@paramzip 压缩的目的地址28 *@paramsrcFiles 压缩的源文件29 */

30 public static void zipFile( String zip , ListsrcFiles ){31 try{32 if( zip.endsWith(".zip") || zip.endsWith(".ZIP") ){33 ZipOutputStream _zipOut = new ZipOutputStream(new FileOutputStream(newFile(zip))) ;34 _zipOut.setEncoding("GBK");35 for( File _f : srcFiles ){36 handlerFile(zip , _zipOut , _f , "");37 }38 _zipOut.close();39 }else{40 System.out.println("target file[" + zip + "] is not .zip type file");41 }42 } catch(FileNotFoundException e) {43 } catch(IOException e) {44 }45 }46

47 /**

48 *49 *@paramzip 压缩的目的地址50 *@paramzipOut51 *@paramsrcFile 被压缩的文件信息52 *@parampath 在zip中的相对路径53 *@throwsIOException54 */

55 private static void handlerFile(String zip , ZipOutputStream zipOut , File srcFile , String path ) throwsIOException{56 System.out.println(" begin to compression file[" + srcFile.getName() + "]");57 if( !"".equals(path) && !path.endsWith(File.separator)){58 path +=File.separator ;59 }60 if( !srcFile.getPath().equals(zip) ){61 if( srcFile.isDirectory() ){62 File[] _files =srcFile.listFiles() ;63 if( _files.length == 0){64 zipOut.putNextEntry(new ZipEntry( path + srcFile.getName() +File.separator));65 zipOut.closeEntry();66 }else{67 for( File _f : _files ){68 handlerFile( zip ,zipOut , _f , path +srcFile.getName() );69 }70 }71 }else{72 InputStream _in = newFileInputStream(srcFile) ;73 zipOut.putNextEntry(new ZipEntry(path +srcFile.getName()));74 int len = 0;75 while( (len = _in.read(_byte)) > 0){76 zipOut.write(_byte, 0, len);77 }78 _in.close();79 zipOut.closeEntry();80 }81 }82 }83

84 /**

85 * 解压缩ZIP文件,将ZIP文件里的内容解压到targetDIR目录下86 *@paramzipName 待解压缩的ZIP文件名87 *@paramtargetBaseDirName 目标目录88 */

89 public static ListupzipFile(String zipPath, String descDir) {90 return upzipFile( newFile(zipPath) , descDir ) ;91 }92

93 /**

94 * 对.zip文件进行解压缩95 *@paramzipFile 解压缩文件96 *@paramdescDir 压缩的目标地址,如:D:\\测试 或 /mnt/d/测试97 *@return

98 */

99 @SuppressWarnings("rawtypes")100 public static ListupzipFile(File zipFile, String descDir) {101 List _list = new ArrayList() ;102 try{103 ZipFile _zipFile = new ZipFile(zipFile , "GBK") ;104 for( Enumeration entries =_zipFile.getEntries() ; entries.hasMoreElements() ; ){105 ZipEntry entry =(ZipEntry)entries.nextElement() ;106 File _file = new File(descDir + File.separator +entry.getName()) ;107 if( entry.isDirectory() ){108 _file.mkdirs() ;109 }else{110 File _parent =_file.getParentFile() ;111 if( !_parent.exists() ){112 _parent.mkdirs() ;113 }114 InputStream _in =_zipFile.getInputStream(entry);115 OutputStream _out = newFileOutputStream(_file) ;116 int len = 0;117 while( (len = _in.read(_byte)) > 0){118 _out.write(_byte, 0, len);119 }120 _in.close();121 _out.flush();122 _out.close();123 _list.add(_file) ;124 }125 }126 } catch(IOException e) {127 }128 return_list ;129 }130

131 /**

132 * 对临时生成的文件夹和文件夹下的文件进行删除133 */

134 public static voiddeletefile(String delpath) {135 try{136 File file = newFile(delpath);137 if (!file.isDirectory()) {138 file.delete();139 } else if(file.isDirectory()) {140 String[] filelist =file.list();141 for (int i = 0; i < filelist.length; i++) {142 File delfile = new File(delpath + File.separator +filelist[i]);143 if (!delfile.isDirectory()) {144 delfile.delete();145 } else if(delfile.isDirectory()) {146 deletefile(delpath + File.separator +filelist[i]);147 }148 }149 file.delete();150 }151 } catch(Exception e) {152 e.printStackTrace();153 }154 }155

156 public static voidmain(String[] args) {}157

158 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值