Java知多少(73)文件的压缩处理

Java.util.zip 包中提供了可对文件的压缩和解压缩进行处理的类,它们继承自字节流类OutputSteam 和 InputStream。其中 GZIPOutputStream 和 ZipOutputStream 可分别把数据压缩成 GZIP 和 Zip 格式,GZIPInpputStream 和 ZipInputStream 又可将压缩的数据进行还原。

将文件写入压缩文件的一般步骤如下:

  1. 生成和所要生成的压缩文件相关联的压缩类对象。
  2. 压缩文件通常不只包含一个文件,将每个要加入的文件称为一个压缩入口,使用ZipEntry(String FileName)生成压缩入口对象。
  3. 使用 putNextEntry(ZipEntry entry)将压缩入口加入压缩文件。
  4. 将文件内容写入此压缩文件。
  5. 使用 closeEntry()结束目前的压缩入口,继续下一个压缩入口。

将文件从压缩文件中读出的一般步骤如下:

  1. 生成和所要读入的压缩文件相关联的压缩类对象。
  2. 利用 getNextEntry()得到下一个压缩入口。
 1 【例 10-13】输入若干文件名,将所有文件压缩为“ep10_13.zip”,再从压缩文件中解压并显示。
 2 //********** ep10_13.java **********
 3 import java.io.*;
 4 import java.util.*;
 5 import java.util.zip.*;
 6 class ep10_13{
 7     public static void main(String args[]) throws IOException{
 8         FileOutputStream a=new FileOutputStream("ep10_13.zip");
 9         //处理压缩文件
10         ZipOutputStream out=new ZipOutputStream(new BufferedOutputStream(a));
11         for(int i=0;i<args.length;i++){  //对命令行输入的每个文件进行处理
12             System.out.println("Writing file"+args[i]);
13             BufferedInputStream in=new BufferedInputStream(new FileInputStream(args[i]));
14             out.putNextEntry(new ZipEntry(args[i]));  //设置 ZipEntry 对象
15             int b;
16             while((b=in.read())!=-1)
17                 out.write(b);  //从源文件读出,往压缩文件中写入
18             in.close();
19         }
20         out.close();
21         //解压缩文件并显示
22         System.out.println("Reading file");
23         FileInputStream d=new FileInputStream("ep10_13.zip");
24         ZipInputStream  inout=new  ZipInputStream(new BufferedInputStream(d));
25         ZipEntry z;
26
27         while((z=inout.getNextEntry())!=null){  //获得入口
28             System.out.println("Reading file"+z.getName());  //显示文件初始名
29             int x;
30             while((x=inout.read())!=-1)
31                 System.out.write(x);
32             System.out.println();
33         }
34         inout.close();
35     }
36 }

例 10-13 运行后,在程序目录建立一个 ep10_13.zip 的压缩文件,使用解压缩软件(如 WinRAR等),可以将其打开。命令提示符下,程序运行结果如图 10-12 所示:


图 10-12  例 10_13 运行结果

系列文章:

Java知多少(上)

Java知多少(39)interface接口

Java知多少(40)接口和抽象类的区别

Java知多少(41)泛型详解

Java知多少(42)泛型通配符和类型参数的范围

Java知多少(43)异常处理基础

Java知多少(44)异常类型

Java知多少(45)未被捕获的异常

Java知多少(46)try和catch的使用

Java知多少(47)多重catch语句的使用

Java知多少(48)try语句的嵌套

Java知多少(49)throw:异常的抛出

Java知多少(50)Java throws子句

Java知多少(51)finally

Java知多少(52)内置异常

Java知多少(53)使用Java创建自己的异常子类

Java知多少(54)断言详解

Java知多少(55)线程

Java知多少(56)线程模型

Java知多少(57)主线程

Java知多少(58)线程Runnable接口和Thread类详解

Java知多少(59)创建多线程

Java知多少(60)isAlive()和join()的使用

Java知多少(61)线程优先级

Java知多少(62)线程同步

Java知多少(63)线程间通信

Java知多少(64)线程死锁

Java知多少(65)线程的挂起、恢复和终止

Java知多少(66)输入输出(IO)和流的概述

Java知多少(67)面向字符的输入流

Java知多少(68)面向字符的输出流

Java知多少(69)面向字节的输入输出流

Java知多少(70)面向字节流的应用

Java知多少(71)文件与目录管理

Java知多少(72)文件的随机读写

时间: 2024-12-25 13:09:41

Java知多少(73)文件的压缩处理的相关文章

Java学习笔记之I/O流(读取压缩文件以及压缩文件)

1.读取压缩文件:ZipInputStream 借助ZipFile类的getInputStream方法得到压缩文件的指定项的内容,然后传递给InputStreamReader类的构造方法,返回给BufferedReader类实例化,从而使得指定项的内容输出到内存中. 2.压缩文件:ZipOutputStream 2.1 注意,zipOut.putNextEntry(entry);// 此方法会清空zip文件原来存在的内容,然后写入文件,并将流定位到条目数据的开始处,直到关闭ZipOutputSt

Java知多少(72)文件的随机读写

Java.io 包提供了 RandomAccessFile 类用于随机文件的创建和访问.使用这个类,可以跳转到文件的任意位置读写数据.程序可以在随机文件中插入数据,而不会破坏该文件的其他数据.此外,程序也可以更新或删除先前存储的数据,而不用重写整个文件. RandomAccessFile类是Object类的直接子类,包含两个主要的构造方法用来创 建RandomAccessFile 的对象,如表 10-11 所示. 表 10-11 RandomAccessFile 类的构造方法 构造方法 功能描述

Java知多少(71)文件与目录管理

目录是管理文件的特殊机制,同类文件保存在同一个目录下不仅可以简化文件管理,而且还可以提高工作效率.Java 语言在 java.io 包中定义了一个 File 类专门用来管理磁盘文件和目录. 每个 File 类对象表示一个磁盘文件或目录,其对象属性中包含了文件或目录的相关信息.通过调用 File 类提供的各种方法,能够创建.删除.重名名文件.判断文件的读写权限以及是否存在,设置和查询文件的最近修改时间等.不同操作系统具有不同的文件系统组织方式,通过使用 File 类对象,Java 程序可以用与平台

java对 zip文件的压缩和解压(ant解决中文乱码)

说明: 1.对于压缩的文件,当文件名称是中文时,若使用JDK API中自带的类(java.util.zip.ZipEntry; java.util.zip.ZipOutputStream;)进行压缩,压缩完成后,可以看到压缩包中的文件名称是乱码(文件的内容无乱码),所以使用ANT中的ant.jar中的类(org.apache.tools.zip.ZipEntry; org.apache.tools.zip.ZipOutputStream;)用来解决此问题: 2.解压缩时,如果压缩包中为空,则创建

Java知多少(完结篇)

Java知多少(1)语言概述 Java知多少(2)虚拟机(JVM)以及跨平台原理 Java知多少(3) 就业方向 Java知多少(4)J2SE.J2EE.J2ME的区别 Java知多少(5) Java开发环境的搭建 Java知多少(6)第一个程序示例 Java知多少(7)类与对象 Java知多少(8)类库及其组织结构 Java知多少(9) import及Java类的搜索路径 Java知多少(10)数据类型及变量 Java知多少(11)数据类型转换 Java知多少(12)运算符 Java知多少(1

Java知多少(中)

Java知多少(39)interface接口 Java知多少(40)接口和抽象类的区别 Java知多少(41)泛型详解 Java知多少(42)泛型通配符和类型参数的范围 Java知多少(43)异常处理基础 Java知多少(44)异常类型 Java知多少(45)未被捕获的异常 Java知多少(46)try和catch的使用 Java知多少(47)多重catch语句的使用 Java知多少(48)try语句的嵌套 Java知多少(49)throw:异常的抛出 Java知多少(50)Java throw

Java知多少(76)语言包(java.lang)简介

Java语言包(java.lang)定义了Java中的大多数基本类,由Java语言自动调用,不需要显示声明.该包中包含了Object类,Object类是整个类层次结构的根结点,同时还定义了基本数据类型的类,如:String.Boolean.Byter.Short等.这些类支持数字类型的转换和字符串的操作等,下面将进行简单介绍. Math类 Math类提供了常用的数学运算方法以及Math.PI和Math.E两个数学常量.该类是final的,不能被继承,类中的方法和属性全部是静态,不允许在类的外部创

Java知多少(75)Object类

Object 类位于 java.lang 包中,是所有 Java 类的祖先,Java 中的每个类都由它扩展而来. 定义Java类时如果没有显示的指明父类,那么就默认继承了 Object 类.例如: 1 public class Demo{ 2 // ... 3 } 实际上是下面代码的简写形式: 1 public class Demo extends Object{ 2 // ... 3 } 在Java中,只有基本类型不是对象,例如数值.字符和布尔型的值都不是对象,所有的数组类型,不管是对象数组还

Java知多少(77)日期和时间类

Java 的日期和时间类位于 java.util 包中.利用日期时间类提供的方法,可以获取当前的日期和时间,创建日期和时间参数,计算和比较时间. Date 类 Date 类是 Java 中的日期时间类,其构造方法比较多,下面是常用的两个: Date():使用当前的日期和时间初始化一个对象. Date(long millisec):从1970年01月01日00时(格林威治时间)开始以毫秒计算时间,计算 millisec 毫秒.如果运行 Java 程序的本地时区是北京时区(与格林威治时间相差 8 小