[重学Java基础][Java IO流][Part.15]压缩流
Java 压缩流
简介
Java官方提供了对三种压缩文件格式的支持 分别是ZIP GZIP JAR格式
ZIP常用操作类
ZipEntry Zip压缩实体 指一个Zip压缩包内的一个被压缩文件
ZipFile Zip文件 指一个Zip压缩包
ZipInputStream Zip压缩包输入流 用于读入一个Zip压缩文件到程序
ZipOutputStream Zip压缩包输出流 用于写出一个Zip压缩文件到外部GZIP常用操作类
GZipInputStream GZip压缩包输入流 用于读入一个GZip压缩文件到程序
GZipOutputStream GZip压缩包输出流 用于写出一个GZip压缩文件到外部JAR常用操作类
JarEntry Jar压缩实体 指一个Jar压缩包内的一个被压缩文件
JarFile Jar文件 指一个Jar压缩包
JarInputStream Jar压缩包输入流 用于读入一个Jar压缩文件到程序
JarOutputStream Jar压缩包输出流 用于写出一个Jar压缩文件到外部
三中压缩格式的比较
- GZIP: 如果只有单个数据流需要压缩(而不是一系列不同的数据),那么它就可能是最适当选择。
- ZIP: 它可以方便地保存多个文件到一个压缩包中,可以追加和修改压缩包中的文件,官方提供了一个独立的类来简化对Zip文件的读操作
- JAR: 和ZIP基本一样 但是为Java文件专门定制了一些方法和属性 如果是打包Java程序使用Jar
Zip 压缩流
java.util.zip.ZipEntry
ZipEntry Zip压缩实体 指一个Zip压缩包内的一个被压缩文件
压缩时 先建立一个zipentry 然后写入数据
压缩多个文件时 循环调用以上步骤
ZipOutputStream 用于写出一个Zip压缩文件到外部
示例
- 压缩多个文件到一个压缩包中
//压缩文件输出的路径
FileOutputStream fileOutputStream = new FileOutputStream("F:\\zipoutput.zip");
ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream);
//设置压缩等级 一共0~9级 级别越高压缩效果越好 当然性能耗费越多 zipOutputStream.setLevel(Deflater.BEST_COMPRESSION);
//设置是进行压缩还是仅仅打包存储 两个级别 // STORED(0) 仅打包用于存储 //DEFLATED(8) 进行压缩 zipOutputStream.setMethod(ZipEntry.DEFLATED);
//待压缩文件夹的路径
File tocompressDty = new File("E:\\图片\\截图");
for (File file : tocompressDty.listFiles()) {
//putNextEntry方法向zip压缩输出流中添加了一个实体并设置了实体名
此处就设置为了被压缩文件的名
zipOutputStream.putNextEntry(new ZipEntry(file.getName()));
//待压缩文件读入内存
FileInputStream fileInputStream =