java实现解压缩工具方法
来源:互联网 发布:火车座位被占知乎 编辑:程序博客网 时间:2024/06/06 05:03
本实现逻辑依赖于apache.tools
压缩
package com.weavernorth.file;import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.CRC32; import java.util.zip.CheckedOutputStream; import org.apache.log4j.Logger; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipOutputStream; /** * 阿帕奇压缩 * @author Dylan * */public class ZipCompressor { private Logger logger = Logger.getLogger(ZipCompressor.class); static final int BUFFER = 8192; private File zipFile; /** * 压缩文件构造函数 * @param pathName 压缩的文件存放目录 */ public ZipCompressor(String pathName) { zipFile = new File(pathName); } /** * 执行压缩操作 * @param srcPathName 被压缩的文件/文件夹 */ public void compressExe(String srcPathName) { File file = new File(srcPathName); if (!file.exists()){ throw new RuntimeException(srcPathName + "不存在!"); } try { FileOutputStream fileOutputStream = new FileOutputStream(zipFile); CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,new CRC32()); ZipOutputStream out = new ZipOutputStream(cos); String basedir = ""; compressByType(file, out, basedir); out.close(); } catch (Exception e) { e.printStackTrace(); logger.error("执行压缩操作时发生异常:"+e); throw new RuntimeException(e); } } /** * 判断是目录还是文件,根据类型(文件/文件夹)执行不同的压缩方法 * @param file * @param out * @param basedir */ private void compressByType(File file, ZipOutputStream out, String basedir) { /* 判断是目录还是文件 */ if (file.isDirectory()) { logger.info("压缩:" + basedir + file.getName()); this.compressDirectory(file, out, basedir); } else { logger.info("压缩:" + basedir + file.getName()); this.compressFile(file, out, basedir); } } /** * 压缩一个目录 * @param dir * @param out * @param basedir */ private void compressDirectory(File dir, ZipOutputStream out, String basedir) { if (!dir.exists()){ return; } File[] files = dir.listFiles(); for (int i = 0; i < files.length; i++) { /* 递归 */ compressByType(files[i], out, basedir + dir.getName() + "/"); } } /** * 压缩一个文件 * @param file * @param out * @param basedir */ private void compressFile(File file, ZipOutputStream out, String basedir) { if (!file.exists()) { return; } try { BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); ZipEntry entry = new ZipEntry(basedir + file.getName()); out.putNextEntry(entry); int count; byte data[] = new byte[BUFFER]; while ((count = bis.read(data, 0, BUFFER)) != -1) { out.write(data, 0, count); } bis.close(); } catch (Exception e) { throw new RuntimeException(e); } } }
解压
package com.weavernorth.file;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Enumeration;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipFile;/** * 阿帕奇解压 * @author Dylan * */public class ZipDecompress { /** * 解压到指定目录 * @param zipPath * @param descDir */ public static void unZipFiles(String zipPath,String descDir)throws IOException{ unZipFiles(new File(zipPath), descDir); } /** * 解压文件到指定目录 * @param zipFile * @param descDir */ @SuppressWarnings("rawtypes") public static void unZipFiles(File zipFile,String descDir)throws IOException{ File pathFile = new File(descDir); if(!pathFile.exists()){ pathFile.mkdirs(); } ZipFile zip = new ZipFile(zipFile); for(Enumeration entries = zip.getEntries();entries.hasMoreElements();){ ZipEntry entry = (ZipEntry)entries.nextElement(); String zipEntryName = entry.getName(); InputStream in = zip.getInputStream(entry); String outPath = (descDir+zipEntryName).replaceAll("\\*", "/");; //判断路径是否存在,不存在则创建文件路径 File file = new File(outPath.substring(0, outPath.lastIndexOf('/'))); if(!file.exists()){ file.mkdirs(); } //判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压 if(new File(outPath).isDirectory()){ continue; } //输出文件路径信息 System.out.println(outPath); OutputStream out = new FileOutputStream(outPath); byte[] buf1 = new byte[1024]; int len; while((len=in.read(buf1))>0){ out.write(buf1,0,len); } in.close(); out.close(); } System.out.println("******************解压完毕********************"); }}
阅读全文
0 0
- java实现解压缩工具方法
- Java实现的ZIP解压缩工具类
- java 解压缩工具类
- java解压缩工具类
- java压缩解压缩文件工具类的实现
- java实现zip解压缩工具,不依赖第三方类库
- java实现压缩解压缩
- java 压缩&解压缩 工具类
- java解压缩文件工具类
- 三个利用Java实现zip压缩/解压缩方法
- 三个利用Java实现zip压缩/解压缩方法
- JAVA字符串压缩解压缩方法
- java实现压缩与解压缩!
- Java实现zip压缩/解压缩
- Java实现文件解压缩源码
- Java实现zip压缩/解压缩
- Huffman 压缩解压缩java实现
- Java压缩,解压缩的实现
- idea快捷键
- 利用JpGraph,可视化数据库中的数据
- 配置maven环境
- DX(DevExpress)RichEditControl 控件 生成导航栏,点击定位到文本
- Mysql在大型网站的应用架构演变
- java实现解压缩工具方法
- Eclipse 中设置JVM 内存及JVM监控调优
- RDB和AOF持久化对比
- mysql配置版安装使用说明,mysql-5.7.20
- java如何实现让程序暂停1s再继续执行?
- cqyz#p3235 【棋盘问题】解题报告
- TensorFlow实现中文字体分类(五):评估
- 笔记:udacity计算机导论
- 测试用的jdbc