压缩和解压缩文件(十一)上

简介: 压缩和解压缩文件(十一)

一. 压缩和解压缩


生活中,我们常见的有 .zip(Windows系统), .jar, .gzip(Linux系统) 等压缩包。 Java语言,也可以实现 压缩和解压缩的功能 。


一个压缩包:


20200618195029186.png


data.txt, data2.txt,129.png 都放置在 A.zip 压缩文件下, 它们叫做 ZipEntry,是文件条目。


我们要想压缩文件, 需要用到 ZipOutputStream 类。


压缩的那个文件,如 A.zip ,不能用普通的 File 类进行接收, 而应该用 ZipFile 类。


我们想要解压缩, 那么需要用到 ZipInputStream 类。


所以,压缩和解压缩 需要用到 ZipEntry, ZipOutputStream, ZipFile, ZipInputStream 四个类。


二. 文件条目 ZipEntry


public class ZipEntry implements ZipConstants, Cloneable {
}


父类是 Object.


二.一 方法


二.一.一 构造方法


二.一.一.一 方法


image.png


二.一.一.二 演示


  public void entryConTest(){
        //第一种方式
        ZipEntry zipEntry=new ZipEntry("压缩文件.txt");
        //第二种方式 
        ZipEntry zipEntry1=new ZipEntry(zipEntry);
    }


一般都采用第一种方式, 直接传入唯一的文件名称。


二.一.二 其他方法


image.png


单独的 ZipEntry 是无法存在的,需要与其他的对象关联使用。


三. Zip文件压缩输出流 ZipOutputStream


三.一 方法


三.一.一 构造方法


三.一.一.一 方法


image.png


三.一.一.二 演示


    @Test
    public void conTest() throws Exception{
        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"jdk91.zip");
        ZipOutputStream zipOutputStream=new ZipOutputStream(new FileOutputStream(file));
    }


三.一.二 其他方法


image.png


三.二 演示 ZipOutputStream


三.二.一 压缩单个文件


@Test
    public void zip1Test() throws Exception{
        //找到要压缩的那个文件, 作输入流
        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"jdk9.CHM");
        InputStream inputStream=new FileInputStream(file);
        //定义要压缩到的那个文件为 输出流
        File outFile=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"jdk9.zip");
        OutputStream outputStream=new FileOutputStream(outFile);
        //定义ZipOutputStream, 传入目标文件的outputStream
        ZipOutputStream zipOutputStream=new ZipOutputStream(outputStream);
        //放置压缩里面的内容,这样就算是放置进去了。
        zipOutputStream.putNextEntry(new ZipEntry(file.getName()));
        //设置注释
        zipOutputStream.setComment("这是什么玩意 ");
        byte[] bytes=new byte[1024];
        int len=-1;
        //读取文件到字节数组
        while((len=inputStream.read(bytes))!=-1){
            // 进行压缩,写入字节数组
            zipOutputStream.write(bytes,0,len);
        }
        //关闭
        zipOutputStream.close();
        outputStream.close();
        inputStream.close();
    }


压缩前:


20200618195042592.png


运行程序,再次查看文件系统


20200618195048403.png


点进去该文件 jdk9.zip,可以进行查看


20200618195058723.png


注意: 压缩文件时,也可以放置多个文件进去。


 zipOutputStream.putNextEntry(new ZipEntry(file.getName()));
  zipOutputStream.putNextEntry(new ZipEntry(file1.getName()));
  zipOutputStream.putNextEntry(new ZipEntry(fil2.getName()));
  zipOutputStream.putNextEntry(new ZipEntry(file3.getName()));


这样 jdk9.zip 里面,就可以有四个文件了。


三.二.二 压缩文件夹


将 data,data2,data3,data4 复制一份到 a 文件夹下。


20200618195116676.png


 @Test
    public void zip2Test() throws Exception{
        //1. 定义压缩输入 的目录
        File inFile=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"a");
        InputStream inputStream=null;
        //2.定义 压缩输出文件
        File outFile=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"a.zip");
        ZipOutputStream zipOutputStream=new ZipOutputStream(new FileOutputStream(outFile));
        zipOutputStream.setComment("压缩文件夹");
        //如果文件是一个目录的话
        if(inFile.isDirectory()){
            //查询该目录下的文件
            File[] fileList=inFile.listFiles();
            for(File f:fileList){
                if(f.isDirectory()){
                    continue;
                }
                //为每一个文件设置一个 输入流
                inputStream=new FileInputStream(f);
               //设置压缩文件条目
                zipOutputStream.putNextEntry(new ZipEntry(f.getName()));
                //
                byte[] bytes=new byte[1024];
                int len=-1;
                while((len=inputStream.read(bytes))!=-1){
                    // 进行压缩
                    zipOutputStream.write(bytes,0,len);
                }
            }
            //关闭
            zipOutputStream.close();
            inputStream.close();
        }else{ //是普通文件
            inputStream=new FileInputStream(inFile);
            zipOutputStream.putNextEntry(new ZipEntry(inFile.getName()));
            byte[] bytes=new byte[1024];
            int len=-1;
            while((len=inputStream.read(bytes))!=-1){
                // 进行压缩
                zipOutputStream.write(bytes,0,len);
            }
            //关闭
            zipOutputStream.close();
            inputStream.close();
        }
    }


运行程序, 查看文件系统


有一个 a.zip 压缩文件,里面有那四个文件。


2020061819512421.png

相关文章
|
1月前
|
存储 C++
基于C++的简易文件压缩与解压缩工具设计与实现
基于C++的简易文件压缩与解压缩工具设计与实现
28 3
|
4天前
1078 字符串压缩与解压 (20 分)
1078 字符串压缩与解压 (20 分)
|
1月前
|
前端开发 JavaScript Java
文件在线压缩与解压系统
文件在线压缩与解压系统
Linux文件系统(三)文档压缩及解压缩
Linux文件系统(三)文档压缩及解压缩
|
Java 程序员
批量压缩16万个文件夹为压缩包(.zip格式)
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
217 0
批量压缩16万个文件夹为压缩包(.zip格式)
|
开发工具 C++
C/C++ 自制一个基于zlib的文件的(解)压缩系统
C/C++ 自制一个基于zlib的文件的(解)压缩系统
465 0
C/C++ 自制一个基于zlib的文件的(解)压缩系统
|
存储 自然语言处理 算法
4.1 打包和压缩的概念和区别
在讲解具体的归档命令和压缩命令之前,先来了解一下归档和压缩所各自代表的含义。
173 0
4.1 打包和压缩的概念和区别
|
消息中间件 前端开发 JavaScript
如何用Java实现文件压缩和解压缩?
PS:最近是跳槽的高峰期,我连日加班好多天,整理出了包含16000 多道面试题的面试宝典,并且指北君也会持续更新这份面试宝典中的题目,希望它能帮助大家找到自己心仪的工作!【文末有领取方式】
如何用Java实现文件压缩和解压缩?
最新!压缩为rar格式方法,目前只能用:WinRAR压缩工具-rar压缩格式的版权所有者。
最新!压缩为rar格式方法,目前只能用:WinRAR压缩工具-rar压缩格式的版权所有者。
211 0
最新!压缩为rar格式方法,目前只能用:WinRAR压缩工具-rar压缩格式的版权所有者。