Java中的IO流④——解压缩流/压缩流、常用工具包

2023-12-13 13:19:44

目录

解压缩流/压缩流

解压缩流

代码示范

压缩流

代码示范

Commons-io

使用步骤

常见方法

文件/文件夹相关

流相关

代码示范

Hutool

相关类

代码示范


解压缩流/压缩流

解压缩流

代码示范

将一个.zip压缩包解压在E盘-->

package com.qiong.myzipstream;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class ZipStreamDemo1 {
    public static void main(String[] args) throws IOException {
        //创建一个File表示要解压的压缩包
        File src = new File("E:\\Data.zip");
        //创建一个File表示解压的目的地
        File dest = new File("E:\\");
        //调用方法
        unzip(src,dest);

    }

    //定义一个方法用来解压
    public static void unzip(File src,File dest) throws IOException {
        //解压的本质:把压缩包里面的每一个文件或者文件夹读取出来,按照层级拷贝到目的地中

        //创建一个解压缩流用来读取压缩包中的数据
        ZipInputStream zip = new ZipInputStream(new FileInputStream(src));

        //获取到压缩包里面的每一个zipentry对象
        ZipEntry entry;
        while ((entry = zip.getNextEntry()) != null){
            System.out.println(entry);
            if (entry.isDirectory()){
                //文件夹:需要在目的地处创建一个同样的文件夹
                File file = new File(dest,entry.toString());
                file.mkdirs();
            }else {
                //文件:需要读取到压缩包中的文件,并把它存放到目的地文件夹中(按照层级目录进行存放)
                FileOutputStream fos = new FileOutputStream(new File(dest,entry.toString()));
                int b;
                while ((b = zip.read()) != -1){
                    //写到目的地
                    fos.write(b);
                }
                fos.close();
                //表示在压缩包中的一个文件处理完毕了。
                zip.closeEntry();
            }
        }
        //释放资源
        zip.close();
    }
}

压缩流

代码示范

压缩单个文件-->

package com.qiong.myzipstream;

import javax.swing.text.DefaultEditorKit;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipStreamDemo2 {
    public static void main(String[] args) throws IOException {
        /*
        压缩流
            需求:
                把E:\\a.txt打包成一个压缩包
         */

        //创建File对象表示要压缩的文件
        File src = new File("E:\\a.txt");
        //创建File对象表示压缩包的位置
        File dest = new File("E:\\");
        //调用方法
        toZip(src, dest);


    }

    /*
    作用:
        参数一:表示要压缩的文件
        参数二:压缩包的位置
     */
    public static void toZip(File src, File dest) throws IOException {
        //创建压缩流关联压缩包
        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(dest, "a.zip")));
        //创建ZipEntry对象,表示压缩包里面的每一个文件和文件夹
        ZipEntry entry = new ZipEntry("a.txt");
        //把ZipEntry对象放到压缩包当中
        zos.putNextEntry(entry);
        //把src文件中的数据写到压缩包当中
        FileInputStream fis = new FileInputStream(src);
        int b;
        while ((b = fis.read()) != -1) {
            zos.write(b);
        }
        zos.closeEntry();
        zos.close();

    }
}

压缩整个文件夹-->

package com.qiong.myzipstream;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipStreamDemo3 {
    public static void main(String[] args) throws IOException {
        /*
        压缩流
            需求:
                把E:\\Data文件夹压缩成一个压缩包
         */

        //创建File对象表示要压缩的文件夹
        File src = new File("E:\\Data");
        //创建File对象表示压缩包放在哪里(压缩包的父级路径)
        File destParent = src.getParentFile();//E:\\
        //创建File对象表示压缩包的路径
        File dest = new File(destParent,src.getName() + ".zip");
        //创建压缩流关联压缩包
        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(dest));
        //获取src里面的每一个文件,变成ZipEntry对象,放入压缩包当中
        toZip(src,zos,src.getName());
        //释放资源
        zos.close();

    }

    /*
        作用:获取src里面的每一个文件,变成ZipEntry对象,放入压缩包当中
        参数一:数据源
        参数二:压缩流
        参数三:压缩包内部的路径
     */
    public static void toZip(File src,ZipOutputStream zos,String name) throws IOException {
        //进入src文件夹
        File[] files = src.listFiles();
        //遍历数组
        for (File file : files) {
            if(file.isFile()){
                //文件:变成ZipEntry对象,放入到压缩包当中
                ZipEntry entry = new ZipEntry(name + "\\" + file.getName());
                zos.putNextEntry(entry);
                //读取文件中的数据,写到压缩包
                FileInputStream fis = new FileInputStream(file);
                int b;
                while ((b = fis.read()) != -1){
                    zos.write(b);
                }
                fis.close();
                zos.closeEntry();
            }else {
                //文件夹:递归
                toZip(file,zos,name + "\\" + file.getName());
            }

        }
    }
}

Commons-io

Commons有非常多的工具类,此时我们要了解的是io工具类

使用步骤

常见方法

文件/文件夹相关

流相关

代码示范

package com.qiong.Commonsio;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;

public class CommonsIODemo1 {
    public static void main(String[] args) throws IOException {
        /*//复制文件
        File src = new File("myio\\a.txt");
        File dest = new File("myio\\copy.txt");
        FileUtils.copyFile(src, dest);*/

        /*//复制文件夹(直接拷贝文件夹里面的内容)
        File src = new File("E:\\aaa");
        File dest = new File("E:\\bbb");
        FileUtils.copyDirectory(src,dest);

        //复制文件夹(把数据源拷贝到文件夹)
        FileUtils.copyDirectoryToDirectory(src,dest);*/

        /*//删除文件夹
        File src = new File("E:\\bbb");
        FileUtils.deleteDirectory(src);*/

        /*//清空文件夹
        File src = new File("E:\\bbb");
        FileUtils.cleanDirectory(src);*/

        //......
    }
}

Hutool

先了解下它的强大

接下来要了解Hutool的IO工具类

相关类

代码示范

package com.qiong.hutool;

import cn.hutool.core.io.FileUtil;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class Test1 {
    public static void main(String[] args) {
        /*
            FileUtil类:
                file:根据参数创建一个file对象
                touch:根据参数创建文件

                writeLines:把集合中的数据写出到文件中,覆盖模式
                appendLines:把集合中的数据写出到文件中,续写模式
                readLines:指定字符编码,把文件中的数据,读到集合中
                readUtf8Lines:按照UTF-8的形式,把文件中的数据,读到集合中

                copy:拷贝文件或者文件夹
         */

        /*//创建对象(可以有多个子级对象)
        File file = FileUtil.file("E:\\", "aaa", "bbb");*/

        /*//创建文件(如果父级路径不存在,会把父级路径一起创建)
        File touch = FileUtil.touch("E:\\ddd\\a.txt");
        System.out.println(touch);*/

        /*//把集合中的数据写出到文件中,覆盖模式
        ArrayList<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("aab");
        list.add("aac");
        File file = FileUtil.writeLines(list, "E:\\a.txt", "UTF-8");
        System.out.println(file);*/

        /*//把集合中的数据写出到文件中,续写模式
        ArrayList<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("aab");
        list.add("aac");
        File file = FileUtil.appendLines(list, "E:\\a.txt", "UTF-8");
        System.out.println(file);*/

        /*//指定字符编码,把文件中的数据,读到集合中,一行数据为一个元素
        List<String> list = FileUtil.readLines("E:\\a.txt", "UTF-8");
        System.out.println(list);*/
    }
}

文章来源:https://blog.csdn.net/qingwan_91/article/details/134947596
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。