ZIP是一种较为常见的压缩形式,在Java中要想实现ZIP的压缩需要导入java.util.zip包,可以使用此包中的ZipFile、ZipOutputStream、ZipInputStream、ZipEntry几个类完成。

ZipOutputStream类的常用方法

ZipInputStream类的常用方法

在JAVA IO中,不仅可以实现ZIP压缩格式的输入、输出,也可以实现JAR及GZIP文件格式的压缩:
 1、JAR压缩的支持类保存在java.util.jar包中,常用的类有 JarOutputStream(JAR压缩输出流)、JarInputStream(JAR压缩输入流)、JARFile(JAR文件)、JAREntry(JAR实体)

2、GZIP是用于UNIX系统的文件压缩,在Linux中经常会使用到*.gz的文件,就是GZIP格式,GZIP压缩的支持类保存在java.util.zip包中,常用的类有  GZIPOutputStream(GZIP压缩输出流)、GZIPInputStream(GZIP压缩输入流)

注意:
1、压缩文件中的每一个压缩实体都使用ZipEntry保存,一个压缩文件中可能包含一个或多个ZipEntry对象。
2、在JAVA中可以进行zip、jar、gz三种格式的压缩支持,操作流程基本上是一致的。
3、ZipOutputStream可以进行压缩的输出,但是输出的位置不一定是文件。
4、ZipFile表示每一个压缩文件,可以得到每一个压缩实体的输入流。

压缩文件

import java.io.*;
import java.util.zip.*;public class MyZip { // 创建类private void zip(String zipFileName, File inputFile) throws Exception {ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName)); // 创建ZipOutputStream类对象zip(out, inputFile, ""); // 调用方法System.out.println("压缩中…"); // 输出信息out.close(); // 将流关闭}private void zip(ZipOutputStream out, File f, String base)throws Exception { // 方法重载if (f.isDirectory()) { // 测试此抽象路径名表示的文件是否是一个目录File[] fl = f.listFiles(); // 获取路径数组out.putNextEntry(new ZipEntry(base + "/")); // 写入此目录的entrybase = base.length() == 0 ? "" : base + "/"; // 判断参数是否为空for (int i = 0; i < fl.length; i++) { // 循环遍历数组中文件zip(out, fl[i], base + fl[i]);}} else {out.putNextEntry(new ZipEntry(base)); // 创建新的进入点// 创建FileInputStream对象FileInputStream in = new FileInputStream(f);int b; // 定义int型变量System.out.println(base);while ((b = in.read()) != -1) { // 如果没有到达流的尾部out.write(b); // 将字节写入当前ZIP条目}in.close(); // 关闭流}}public static void main(String[] temp) { // 主方法MyZip book = new MyZip(); // 创建本例对象try {// 调用方法,参数为压缩后文件与要压缩文件book.zip("hello.zip", new File("src"));System.out.println("压缩完成"); // 输出信息} catch (Exception ex) {ex.printStackTrace();}}
}

解压文件

import java.io.*;
import java.util.zip.*;public class Decompressing { // 创建文件public static void main(String[] temp) {ZipInputStream zin; // 创建ZipInputStream对象try { // try语句捕获可能发生的异常zin = new ZipInputStream(new FileInputStream("hello.zip"));// 实例化对象,指明要进行解压的文件ZipEntry entry = zin.getNextEntry(); // 获取下一个ZipEntrywhile (((entry = zin.getNextEntry()) != null)&& !entry.isDirectory()) {// 如果entry不为空,并不在同一目录下File file = new File("d:\\" + entry.getName()); // 获取文件目录System.out.println(file);if (!file.exists()) { // 如果该文件不存在file.mkdirs();// 创建文件所在文件夹file.createNewFile(); // 创建文件}zin.closeEntry(); // 关闭当前entrySystem.out.println(entry.getName() + "解压成功");}zin.close(); // 关闭流} catch (Exception e) {e.printStackTrace();}}
}

Java ZIP压缩输入输出流相关推荐

  1. Java基础(二):集合、IO流(Zip压缩输入/输出流等)、File文件类、反射、枚举

    Java基础(一):编译和解释.数据类型.变量作用域.String常用方法.数组.面向对象.异常 Java基础(二):集合.IO流(Zip压缩输入/输出流等).File文件类.反射.枚举 Java异常 ...

  2. java zip压缩率为0_java中zip压缩输入输出流的问题,ZipEntry()方法里的参数到底什么意思...

    展开全部 ZipEntry 用于保存一些被压缩文件的信息,32313133353236313431303231363533e78988e69d8331333365643635如文件名,最后访问时间,最 ...

  3. Java Zip压缩实现(亲测)

    最近在自学javaWeb,先复习一下java,把还给老师的东西再找回来(知识如果不用很快就会忘记啊).. 今天看到了zip压缩,决定要整理一下. java将有关zip压缩的内容都封装在java.uti ...

  4. java zip压缩

    系列文章目录 第一章 万事万物皆对象 第二章 java构造器 第三章 java访问权限 第四章 java初始化 第五章 java继承 第六章 java重载与重写 第七章 java接口和抽象类 第八章 ...

  5. java zip压缩解压_JAVA实现实用的ZIP压缩与解压

    程序实现了ZIP压缩.共分为2部分 : 压缩(compression)与解压(decompression) 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压. ...

  6. Java zip 压缩 文件夹删除,移动,重命名,复制

    FileUtil.java import java.io.*; import java.util.List; import java.util.zip.ZipEntry; import java.ut ...

  7. java zip 压缩乱码_java实现zip压缩中文文件名乱码怎么办?

    java实现zip压缩中文文件名乱码怎么办? java实现zip压缩中文文件名乱码的解决办法: 一.文件压缩的中文乱码问题 1.中文文件名的乱码解决 对于压缩的文件,当文件名称是中文时,若使用JDK ...

  8. java zip压缩 加密码_java 压缩成zip文件、解压zip文件(可设置密码)

    1.情景展示 java实现将文件夹进行压缩打包的功能及在线解压功能 2.解决方案 方式一:压缩.解压zip 准备工作:slf4j-api.jar org.slf4j slf4j-api 1.7.25 ...

  9. java怎么创建输入输出流_Java输入输出流

    1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...

最新文章

  1. OSChina 周三乱弹 ——是不是兄弟?是兄弟就帮我解决下!
  2. 关于readdir返回值中struct dirent.d_type的取值有关问题(转)
  3. 计算机视觉编程——图像聚类
  4. 数据库对象管理 (表)
  5. wap(dopra linux )命令,运营商定制的华为光猫Telnet命令恢复华为界面
  6. NAT网关之SNAT进阶使用(二)构建ECS级别SNAT出网方式
  7. Linux RAID磁盘阵列
  8. bzoj2460 [BeiJing2011]元素 贪心+线性基
  9. 机器视觉——双目视觉的基础知识(视差深度、标定、立体匹配)
  10. 敏捷开发之组织级经验分享
  11. 【数字信号】基于matlab GUI DTMF信号生成与检测(带按键音)【含Matlab源码 1086期】
  12. 人脸识别“抓”错了人,他在监狱待了10天
  13. html插入腾讯视频自动播放,腾讯视频代码在哪里 腾讯视频嵌入网页的方法
  14. 回归中的相关度和R平方值
  15. 请问java如何跟isapi通讯,代码怎么实现?
  16. 如何评小学计算机课,小学信息技术优质课评选听课心得体会
  17. 北京公共计算机考试准考证打印
  18. devops学习(十) Jenkins 流水线
  19. LINK : fatal error LNK1104: 无法打开文件“mfc140u.lib” 错误解决方案
  20. Ubuntu 安裝思源字體

热门文章

  1. 石墨烯/SiO2复合气凝胶微球/包覆二氧化硅纳米颗粒/载Pt石墨烯中空二氧化硅微球
  2. 【打印机】argox入门
  3. 汽车电子的发展简介和V型开发模式
  4. 全国外语水平考试(WSK)
  5. 读写权限分明已获取还Permission Denied
  6. 爱普生Me330 打印机改装连供系统计划
  7. 数据存储单位的换算单位
  8. 做速卖通的优势和不足
  9. 服务器登录密码 被修改,服务器登录密码被人改
  10. ESP32开发学习(IDF)--简介