Zip压缩解压缩_已解决中文乱码
来源:互联网 发布:php链接mysql数据库 编辑:程序博客网 时间:2024/04/30 06:37
package com.my.zip;import java.io.BufferedInputStream;import java.io.Closeable;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.zip.CRC32;import java.util.zip.CheckedOutputStream;import java.util.zip.ZipInputStream;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipOutputStream;/** * 文件、文件夹压缩为 zip包 <br /> * zip包解压 <br /> * 依赖jar包 <br /> * <dependency> * <groupId>org.apache.ant</groupId> * <artifactId>apache-ant-zip</artifactId> * <version>1.8.0</version> * </dependency> */public class Zip { private static final int BUFFER = 8192; /** * 设置压缩编码,解决中文文件名乱码问题 */ private static final String encoding = System.getProperty("sun.jnu.encoding"); static { /** * 解压依据的编码是sun.zip.encoding 所以需要设置 解压编码 */ System.setProperty("sun.zip.encoding", encoding); } private Zip() { } /** * 释放资源 * @param resources */ private static void closeResource(Closeable... resources){ if(resources==null || resources.length < 1) return; for (Closeable cur : resources) { if(cur == null) continue; if(cur instanceof ZipInputStream){ ZipInputStream zis = (ZipInputStream)cur; try { zis.closeEntry(); } catch (IOException e) { } } if(cur instanceof ZipOutputStream){ ZipOutputStream zos = (ZipOutputStream)cur; try { zos.closeEntry(); } catch (IOException e) { } } try { cur.close(); } catch (IOException e) { } } } /** * 执行压缩 * @param file * @param out * @param basedir */ private static void doCompress(File file, ZipOutputStream out, String basedir) { if (!file.exists()){ return; } if (file.isDirectory()) { //压缩目录 File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) { doCompress(files[i], out, basedir + file.getName() + "/"); } } else { //压缩文件 BufferedInputStream bis = null; try { 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); } } catch (Exception e) { throw new RuntimeException(e); }finally{ closeResource(bis); } } } /** * 获取当前时间 * @return */ private static String getNowStr(){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.format(new Date()); } /** * 配置压缩属性 * @param out */ private static void configCompressProperties(ZipOutputStream out){ //设置文件名编码方式 out.setEncoding(encoding); //设置压缩说明 out.setComment("\n压缩时间:"+getNowStr()+" \n"); } /** * Zip压缩文件或者文件夹 * @param srcPathName 待压缩文件或者文件夹路径 * @param zipFileName 压缩后压缩文件存放路径 */ public static void compress(String srcPathName, String zipFileName) { File file = new File(srcPathName); File zipFile = new File(zipFileName); if (!file.exists()){ throw new RuntimeException(srcPathName + "不存在!"); } boolean isSuccessful = true; ZipOutputStream out = null; try { CheckedOutputStream cos = new CheckedOutputStream(new FileOutputStream(zipFile), new CRC32()); out = new ZipOutputStream(cos); //配置压缩属性 configCompressProperties(out); //执行压缩 doCompress(file, out, ""); } catch (Exception e) { isSuccessful = false; throw new RuntimeException(e); }finally{ closeResource(out); System.out.println("压缩处理"+(isSuccessful ? "成功!": "失败!")); } } /** * Zip解压压缩包 * @param zipFilePath 压缩包路基 * @param destDir 解压后存放路径 */ public static void uncompress(String zipFilePath, String destDir) { File dir = new File(destDir); if (!dir.exists()){ dir.mkdirs(); } boolean isSuccessful = true; ZipInputStream zis = null; FileOutputStream fos = null; byte[] buffer = new byte[BUFFER]; try { zis = new ZipInputStream(new FileInputStream(zipFilePath)); java.util.zip.ZipEntry ze = zis.getNextEntry(); while (ze != null) { String fileName = ze.getName(); File newFile = new File(destDir + File.separator + fileName); new File(newFile.getParent()).mkdirs(); fos = new FileOutputStream(newFile); int len; while ((len = zis.read(buffer)) > 0) { fos.write(buffer, 0, len); } fos.close(); zis.closeEntry(); ze = zis.getNextEntry(); } } catch (IOException e) { isSuccessful = false; throw new RuntimeException(e); }finally{ closeResource(fos, zis); System.out.println("解压处理"+(isSuccessful ? "成功!": "失败!")); } } /** * 测试用例 */ public static void main(String[] args) { String srcDir = "D:\\mytestdir"; String tarFile = "D:\\mytestdir.zip"; Zip.compress(srcDir, tarFile); Zip.uncompress(tarFile, "d:\\mytestdir_uncompress"); }}
0 0
- Zip压缩解压缩_已解决中文乱码
- Java 压缩、解压缩文件(中文乱码问题已解决)
- 解压缩zip文件(解决中文乱码)
- 【转载】JAVA压缩 解压缩zip 并解决linux下中文乱码
- linux zip解压缩中文乱码
- zip解压中文乱码解决与使用ant实现zip解压缩
- zip解压中文乱码解决与使用ant实现zip解压缩
- Java实现Zip压缩与解压(解决中文乱码问题)
- 关于ZIP压缩问题 解决中文文件名乱码
- Java实现Zip压缩与解压(解决中文乱码问题)
- Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)
- PHP解压ZIP压缩包,解决中文乱码问题
- zip压缩 中文乱码解决方法
- Ubuntu 16.04 解压缩zip文件中文乱码
- ubuntu下解决zip解压缩后乱码
- ant解决压缩/解压缩中乱码问题
- java 解压缩zip 压缩zip
- zip文件压缩解压缩
- Android Webview upload 图片上传
- vb
- 剑指Offer——n个骰子扔出点数和S的概率
- struts2文件上传与下载
- 10个随机数和
- Zip压缩解压缩_已解决中文乱码
- 你从未见过的“求二进制中1的个数”解法
- 随机十个数求和8
- Android自定义控件来袭(Scroller)
- MainWindow.cpp
- 字符串转化为二维数组
- JS格式化日字符串
- MyEclipse快捷键
- Form表单异步提交,不刷新页面