Java GZIPOutputStream流压缩文件的操作

我就废话不多说了,大家还是直接看代码吧~

不多说,直接上代码

public static void main(String[] args) throws Exception{

    //压缩文件
    File src = new File("e:/xx/aa.txt");
    File zipFile = new File("e:/xx/a.zip");
    FileOutputStream fos = new FileOutputStream(zipFile);
    ZipOutputStream zos = new ZipOutputStream(fos);
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
    ZipEntry entry = new ZipEntry( src.getName());
    zos.putNextEntry(entry);
    int count;
    byte[] buf = new byte[1024];
    while ((count = bis.read(buf)) != -1) {
      zos.write(buf, 0, count);
    }
    bis.close();
    //fos.close();
    zos.close();//
    }

压缩的步骤是:

src将要压缩的文件,zipFile 压缩后的文件,压缩流套接zipFile,然后将src文件写入zipFile,其中ZipEntry中放入的源文件的当前名称,putNextEntry是将源文件的当前名称定位到条目数据的开始处。

补充:Java ZIP压缩输入输出流

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 + "/")); // 写入此目录的entry
  base = 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(); // 获取下一个ZipEntry
  while (((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(); // 关闭当前entry
  System.out.println(entry.getName() + "解压成功");
  }
  zin.close(); // 关闭流
 } catch (Exception e) {
  e.printStackTrace();
 }
 }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Java多文件以ZIP压缩包导出的实现方法

    本文实例为大家分享了Java多文件以ZIP压缩包导出的具体代码,供大家参考,具体内容如下 1.使用java实现吧服务器的图片打包成一个zip格式的压缩包导出,多个文件打包导出. 2.代码如下: **ImageByteUtil.java** public class ImageByteUtil{ private static float QUALITY = 0.6f; public static void compressZip(List<File> listfiles, OutputStrea

  • 浅谈JAVA中输入输出流实例详解

    java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象.在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流....本文的目的是为大家介绍JAVA中输入输出流实例详解. 流的层次结构 定义:        java将读取数据对象成为输入流,能向其写入的对象叫输出流.结构图如下: 1.输入输出: 输入/输出(Input/Output)是指对某

  • Java输入/输出流体系详解

    在用java的io流读写文件时,总是被它的各种流能得很混乱,有40多个类,理清啦,过一段时间又混乱啦,决定整理一下!以防再忘 Java输入/输出流体系 1.字节流和字符流 字节流:按字节读取.字符流:按字符读取. 字符流读取方便,字节流功能强大,当不能用字符流时,可以用字节流. 字节流基类:InputStream.OutputStream InputStream方法: OutputStream方法: 字符流基类:Reader.Writer Reader方法: Writer方法: 2.输入输出流体

  • Java GZIPOutputStream流压缩文件的操作

    我就废话不多说了,大家还是直接看代码吧~ 不多说,直接上代码 public static void main(String[] args) throws Exception{ //压缩文件 File src = new File("e:/xx/aa.txt"); File zipFile = new File("e:/xx/a.zip"); FileOutputStream fos = new FileOutputStream(zipFile); ZipOutput

  • Java IO流对文件File操作

    目录 什么是文件 常用的文件操作 创建文件 获取文件信息 目录的操作和文件删除 什么是文件 文件,对我们并不陌生,文件是保存数据的地方,比如大家经常使用的word文档,txt文件,exce|文件..都是文件.它既可以保存一-张图片也可以保持视频,声音... 文件流 文件在程序中是以流的形式来操作的. 流:数据在数据源(文件)和程序(内存)之间经历的路径. 输入流:数据从数据源(文件)到程序(内存)的路径. 输出流:数据从程序(内存)到数据源(文件)的路径. 可以把上面的流比作人喝水 从杯子里的水

  • Java实现自动压缩文件并加密的方法示例

    本文实例讲述了Java实现自动压缩文件并加密的方法.分享给大家供大家参考,具体如下: 实现功能:自动压缩并加密 /** * * @Title: zipFilesAndEncrypt * @Description: 将指定路径下的文件压缩至指定zip文件,并以指定密码加密,若密码为空,则不进行加密保护 * @param srcFileName 待压缩文件路径 * @param zipFileName zip文件名 * @param password 加密密码 * @return * @throws

  • Java创建ZIP压缩文件的方法

    本文实例讲述了Java创建ZIP压缩文件的方法.分享给大家供大家参考.具体如下: 这里注意:建议使用org.apache.tools.zip.*包下相关类,否则可能会出现中文乱码问题. /** * 压缩文件夹 * @param sourceDIR 文件夹名称(包含路径) * @param targetZipFile 生成zip文件名 * @author liuxiangwei */ public static void zipDIR(String sourceDIR, String target

  • java IO流将一个文件拆分为多个子文件代码示例

    文件分割与合并是一个常见需求,比如:上传大文件时,可以先分割成小块,传到服务器后,再进行合并.很多高大上的分布式文件系统(比如:google的GFS.taobao的TFS)里,也是按block为单位,对文件进行分割或合并. 看下基本思路: 如果有一个大文件,指定分割大小后(比如:按1M切割) step 1: 先根据原始文件大小.分割大小,算出最终分割的小文件数N step 2: 在磁盘上创建这N个小文件 step 3: 开多个线程(线程数=分割文件数),每个线程里,利用RandomAccessF

  • python3实现的zip格式压缩文件夹操作示例

    本文实例讲述了python3实现的zip格式压缩文件夹操作.分享给大家供大家参考,具体如下: 思路:先把第一级目录中的文件进行遍历,如果是文件,则把它连同当前路径一起加入result(list),如果是子目录,则在整个目录上继续深度优先遍历,直到所有的文件都被加入.主要使用python3中zipfile模块: class zipfile.ZipFile(file [,mode [,compression [,allowZip64 ] ] ] ) 参数说明: 1.第一个参数file可以是文件(字符

  • Java C++题解leetcode1598文件夹操作日志搜集器

    目录 题目要求 思路:模拟 Java C++ Rust 总结 题目要求 思路:模拟 根据日志判断目前在哪一级子文件夹即可,级数就等于返回时的步数,主文件夹级数初始为000: xl:级数+1+1+1: ./:级数不变: ../:级数−1-1−1. Java class Solution { public int minOperations(String[] logs) { int res = 0; for (String l : logs) { if (l.equals("../"))

  • Java IO流和文件操作实现过程解析

    Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类型.对象.本地化字符集等等. 一个流可以理解为一个数据的序列.输入流表示从一个源读取数据,输出流表示向一个目标写数据. Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中. 控制台输入 BufferedReader br = new BufferedReader(new InputStreamReader(Syste

  • Java使用FileInputStream流读取文件示例详解

    一.File流概念 JAVA中针对文件的读写操作设置了一系列的流,其中主要有FileInputStream,FileOutputStream,FileReader,FileWriter四种最为常用的流 二.FileInputStream 1)FileInputStream概念  FileInputStream流被称为文件字节输入流,意思指对文件数据以字节的形式进行读取操作如读取图片视频等 2)构造方法 2.1)通过打开与File类对象代表的实际文件的链接来创建FileInputStream流对象

  • Linux下对各种压缩文件的处理方法

    Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的.生成tar包后,就可以用其它的程序来进行压缩了,所以首先就来讲讲tar命令的基本用法: tar命令的选项有很多(用man tar可以查看到),但常用的就那么几个选项,下面 来举例说明一下: # tar -cf all.tar *.jpg 这条命令是将所有.jpg的文件打成一个名为all.tar的包.-c是表示产生新的包,-f指定包的文件名. # tar -rf all

随机推荐