使用这个API没有找到解决中文乱码的问题 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; import java.util.zip.Adler32; import java.util.zip.CheckedInputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; public class ZipUtils { private static final int BUFFER = 8192; private static void log(String msg) { System.out.println(msg); } private static String getFileName(String filePath) { int index = filePath.indexOf("."); return filePath.substring(0, index); } public static void zip(String sourceFilePath) { File fileDir = new File(sourceFilePath); if (fileDir.exists()) { log(fileDir.getPath() + " Starting Zip ..."); long startTime = System.currentTimeMillis(); doZip(fileDir); long endTime = System.currentTimeMillis(); long costTime = endTime - startTime; log("Zip Success!"); log("use time -- " + costTime + " millsec!"); } else { log("can't find the File!"); } } public static void unZip(String zipFilePath) { File fileDir = new File(zipFilePath); if (fileDir.exists()) { log(fileDir.getPath() + " Starting UnZip ..."); long startTime = System.currentTimeMillis(); doUnZip(fileDir); long endTime = System.currentTimeMillis(); long costTime = endTime - startTime; log("UnZip Success!"); log("use time -- " + costTime + " millsec!"); } else { log("can't find the File!"); } } public static void doZip(File file) { List fileList = new ArrayList(); List allFiles = (ArrayList) searchFiles(file.getPath(), fileList); Object[] fileArray = allFiles.toArray(); BufferedInputStream in = null; FileInputStream fis = null; ZipOutputStream zos = null; FileOutputStream fos = null; try { fos = new FileOutputStream(file.getParent() + File.separator + file.getName() + ".zip"); zos = new ZipOutputStream(new BufferedOutputStream(fos, BUFFER)); zos.setLevel(9); byte[] data = new byte[BUFFER]; for (int i = 0; i < fileArray.length; i++) { // 设置压缩文件入口entry,为被读取的文件创建压缩条目 具体要压缩的文件 File tempFile = new File(fileArray[i].toString());//c:/test/stat03_temp.xls String rootStr = file.getPath();//c:/test String entryStr = null; // entry以相对路径的形式设置。 // 如果设置不当,会出现拒绝访问等错误 // 分别处理单个文件/目录的entry if (rootStr.equals(tempFile.getPath())) { entryStr = tempFile.getName(); } else { entryStr = tempFile.getPath().substring( (rootStr + File.separator).length());//stat03_temp.xls } log(entryStr); ZipEntry entry = new ZipEntry(entryStr); zos.putNextEntry(entry); fis = new FileInputStream(tempFile); in = new BufferedInputStream(fis, BUFFER); int count; while ((count = in.read(data, 0, BUFFER)) != -1) { zos.write(data, 0, count); } } } catch (Exception ex) { ex.printStackTrace(); } finally { try { if (in != null) { in.close(); } if (zos != null) { zos.close(); } } catch (Exception e) { e.printStackTrace(); } } } public static void doUnZip(File file) { try { final int BUFFER = 2048; BufferedOutputStream dest = null; FileInputStream fis = new FileInputStream(file); CheckedInputStream checksum = new CheckedInputStream(fis, new Adler32()); ZipInputStream zis = new ZipInputStream(new BufferedInputStream( checksum)); ZipEntry entry; while ((entry = zis.getNextEntry()) != null) { log("Extracting: " + entry); int count; byte[] data = new byte[BUFFER]; log("unzip to " + getFileName(file.getPath())); FileOutputStream fos = new FileOutputStream(getFileName(file .getPath()) + File.separator + newDir(file, entry.getName())); dest = new BufferedOutputStream(fos, BUFFER); while ((count = zis.read(data, 0, BUFFER)) != -1) { dest.write(data, 0, count); } dest.flush(); dest.close(); } zis.close(); System.out .println("Checksum: " + checksum.getChecksum().getValue()); } catch (Exception e) { e.printStackTrace(); } } //递归把文件及路径信息存放到list里面 public static List searchFiles(String sourceFilePath, List fileList) { File fileDir = new File(sourceFilePath); if (fileDir.isDirectory()) { File[] subfiles = fileDir.listFiles(); for (int i = 0; i < subfiles.length; i++) { searchFiles(subfiles[i].getPath(), fileList); } } else { fileList.add(fileDir); } return fileList; } //创建新文件夹 private static String newDir(File file, String entryName) { //c:/test.zip stat03_temp.xls String rootDir = getFileName(file.getPath());//c:/test log("root:" + rootDir); int index = entryName.lastIndexOf(file.separator); String dirStr = new File(rootDir).getParent();//c:/ log(dirStr); if (index != -1) { String path = entryName.substring(0, index); log("new Dir:" + rootDir + file.separator + path); new File(rootDir + file.separator + path).mkdirs(); log("entry:" + entryName.substring(0, index)); } else { new File(rootDir).mkdirs(); log("entry:" + entryName); } return entryName; } public static void main(String[] args) { zip("c://浙椒"); // unZip("c://test.zip"); } }

java压缩与解压缩(1)使用java.util.zip相关推荐

  1. java压缩与解压缩

    2019独角兽企业重金招聘Python工程师标准>>> 主要用到apache的ant.jar,也可用jdk的相关类,但会有中文乱码问题.最重要的俩类是ZipFile和ZipEntry ...

  2. java 压缩、解压缩 tar.gz

    引入依赖 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-co ...

  3. java压缩文件读取_用Java读取/写入压缩和非压缩文件

    java压缩文件读取 这篇文章的主要原因是尝试不要重复自己( DRY ),因为通常,我会遇到递归的需求,即读写压缩的和非压缩的文件(主要是JSON和CSV). 首先让我们看看如何读取文本文件. 注意我 ...

  4. java 压缩 乱码_如何解决java压缩文件乱码问题

    用java来打包文件生成压缩文件,有两个地方会出现乱码: 内容的中文乱码问题:修改sun的源码.使用开源的类库org.apache.tools.zip.ZipOutputStream和org.apac ...

  5. java压缩文件_Linux 系统学习--Java学习第118天

    第141次(Linux) 学习主题:Linux 学习目标: 1 掌握Linux常用命令 对应作业 Linux常用命令1 如何使用cd命令切换固定位置? cd 目录名 中间必须要有空格隔开 如何使用cd ...

  6. java 文件压缩 解压_Java文件压缩与解压缩(一)

    package com.cn; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream ...

  7. Python学习笔记(一)压缩与解压缩文件

    Python压缩与解压缩文件 Python能够直接处理zip文件中的数据,例如需要将对应目录或多文件打包或压缩成zip格式,或者需要查看一个zip格式的归档文件中部分或所有的文件同时避免将这些文件展开 ...

  8. linux系统压缩与解压缩工具使用方法

    linux系统压缩与解压缩工具包括7z.zip/unzip.rar/unrar 一.7z 安装: 执行以下命令下载安装: wget https://udomain.dl.sourceforge.net ...

  9. java压缩解压缩类实例[转]

    package com.yangxiaozuo.util; import java.io.ByteArrayOutputStream;   import java.io.IOException;   ...

最新文章

  1. Mac zsh not found jupyter notebook
  2. 在linux下安装VITIS-AI人工智能开发环境配置
  3. CF1550E Stringforces
  4. 基于bootstrap框架在ie8以下,兼容媒体查询[css样式]
  5. 计算机教授丁三石,一次难忘的计算机课!!
  6. c语言学习进阶-C语言程序出错处理
  7. 附录:保护模式下的各个“对象”
  8. ENVI入门系列教程---一、数据预处理---1.2基本操作--5.x以后的界面(旧界面)
  9. adb小天才,小天才调试工具包下载
  10. Elasticsearch自动补全(拼音查询自动补全)
  11. 【语音处理】音频信号分析仪Matlab系统
  12. 小白怎么入门网络安全?
  13. matlab两条曲线方程求交点_帮忙matlab求两条曲线交点程序,不知问题出在哪里。...
  14. 可视化神器Plotly玩转多子图绘制
  15. 72---百钱买百鸡问题
  16. web应用漏洞扫描工具实践——wmap
  17. 记录一次nodejs爬取《17吉他》所有吉他谱(只探讨技术)
  18. 【HUSTOJ】Online Judge
  19. Python(Linux下)获取串口的idv和idp以及serial序列号
  20. 推荐一款全能PDF编辑神器:PDFelement Pro Mac中文版

热门文章

  1. 安卓SDK——人脸识别
  2. 【软件测试】:“用户登录”功能测试用例设计方法
  3. 如何保证网络安全,常见的网络安全技术
  4. 代码实现全局消息钩子SetWindowsHookExA监视按键记录
  5. JDBC之execute、executeQuery和executeUpdate之间的区别
  6. 2019【王道】【天勤】考研系列图书勘误表
  7. java 给word加水印,Java 实现在线给word 文档添加水印
  8. 数据结构:网上公开课
  9. Python基本数据类型--列表
  10. U-Net实现医学图像分割(pytorch)