栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

用Java的IO流实现对文件的压缩和解压缩

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用Java的IO流实现对文件的压缩和解压缩

package edu.mama.ls16;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class ZipIO {
    public static void main(String[] args) throws IOException {
        //文件压缩(相对路径)
        String[] zipArray = {"res/语录1.txt", "res/语录2.txt", "res/英文资料.txt"};
        zip(zipArray, "res/ZipFile.zip");

        //文件解压(相对路径)
        unzip("res/秘密相册.zip", "res/");
    }

    public static void zip(String[] sourceFileArray, String targetPath) throws IOException {
        //因为需要在try内部不断对fileInputStream赋值,故定义为公共变量,方便关闭资源
        FileInputStream fileInputStream = null;

        //定义压缩资源的文件条目,同样需要不断进行赋值
        ZipEntry zipEntry = null;

        //try ~ resource 写法,给压缩步骤(输出流)开流
        try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(targetPath))) {
            for (String item : sourceFileArray) {
                //将文件送入输入流
                fileInputStream = new FileInputStream(item);

                //记录文件条目
                zipEntry = new ZipEntry(item);
                zipOutputStream.putNextEntry(zipEntry);

                //输入流直接对接输出流
                fileInputStream.transferTo(zipOutputStream);
            }

            //关闭文件条目
            zipOutputStream.closeEntry();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileInputStream != null) {
                    fileInputStream.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static void unzip(String sourcePath, String targetPath) throws IOException {
        //定义输出流
        FileOutputStream fileOutputStream = null;

        //try ~ resource 给解压缩步骤(输入流)开流
        try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(sourcePath))) {
            //获取文件条目
            ZipEntry zipEntry = zipInputStream.getNextEntry();

            while (zipEntry != null) {
                //输出流的目录是目标路径拼接上文件的名称
                fileOutputStream = new FileOutputStream(targetPath + zipEntry.getName());

                //输入流对接输出流
                zipInputStream.transferTo(fileOutputStream);

                //更新文件条目为下一条
                zipEntry = zipInputStream.getNextEntry();
            }

            //关闭文件条目
            zipInputStream.closeEntry();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileOutputStream != null) {
                    fileOutputStream.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/284004.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号