美文网首页
java二十(文件的压缩和解压)

java二十(文件的压缩和解压)

作者: Nic_ofh | 来源:发表于2017-10-10 11:39 被阅读0次
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class zip压缩与解压 {

    public static void main(String[] args) {
        // compression("C:\\Users\\puban\\Desktop\\b.zip", new File("C:\\Users\\puban\\Desktop\\设计稿"));
        deCompression("C:\\\\Users\\\\puban\\\\Desktop\\\\b.zip", "C:\\Users\\puban\\Desktop\\java");
    }

    // 文件夹和文件压缩

    /**
     * @param zipFilePath 压缩后的文件路径;
     * @param targetFile  需要压缩的文件
     */
    public static void compression(String zipFilePath, File targetFile) {
        try {

            if (zipFilePath == null || targetFile == null) return;

            // zip输出流:写入文件
            ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipFilePath));
            // 设置压缩等级
            zipOutputStream.setLevel(1);
            // 加入缓存
            BufferedOutputStream bos = new BufferedOutputStream(zipOutputStream); // 加入到缓存

            zip(zipOutputStream, targetFile, targetFile.getName(), bos);

            // 关闭流
            bos.close();
            zipOutputStream.close();

            System.out.println("压缩成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * @param zipOutputStream zip输出流
     * @param targetFile      压缩的文件
     * @param name            压缩的名字
     * @param bos             缓存
     */

    private static void zip(ZipOutputStream zipOutputStream, File targetFile, String name, BufferedOutputStream bos) throws IOException {
        // 如果是文件夹
        if (targetFile.isDirectory()) {
            File[] files = targetFile.listFiles(); // 获取所有文件
            // 如果是空文件夹,也要压缩
            if (files.length == 0) {
                zipOutputStream.putNextEntry(new ZipEntry(name + "/"));
            }
            System.out.println(name);

            for (File f : files) {
                // 递归处理
                // name : 文件夹名字+f.separator(分割符号)+文件名称
                zip(zipOutputStream, f, name + f.separator + f.getName(), bos);
            }
        } else {
            // 如果是文件 写入zip流
            zipOutputStream.putNextEntry(new ZipEntry(name));
            InputStream in = new FileInputStream(targetFile);
            BufferedInputStream bis = new BufferedInputStream(in);

            int len = -1;
            byte[] bytes = new byte[1024];

            while ((len = bis.read(bytes)) != -1) {
                bos.write(bytes, 0, len);
                bos.flush();   // 每次写入完成之后都要刷新一下缓存,不然下一次生成文件就会文件错误
            }

            bis.close();
        }
    }


    // 文件解压

    /**
     * @param zipFilePath   要压缩文件路径
     * @param newPathParent 放在哪个路径
     */
    public static void deCompression(String zipFilePath, String newPathParent) {
        try {
            // 输出流
            ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFilePath));
            File file = null;
            ZipEntry zipEntry = null;

            while ((zipEntry = zipInputStream.getNextEntry()) != null && !zipEntry.isDirectory()) {
                // 这里包括文件文件夹的创建
                file = new File(newPathParent, zipEntry.getName());

                // 如果这个不是文件,就创建上级文件夹
                if (!file.exists()) {
                    new File(file.getParent()).mkdir();
                }
                // 写入文件
                OutputStream out = new FileOutputStream(file);
                BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(out);

                int len = -1;
                byte[] bytes = new byte[1024];
                while ((len = zipInputStream.read(bytes)) != -1) {
                    bufferedOutputStream.write(bytes, 0, len);
                    bufferedOutputStream.flush(); // 刷新缓存
                }
                bufferedOutputStream.close();

            }
            System.out.println("解压成功");

            zipInputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

相关文章

  • Linux配置JDK

    下载jdk压缩包,放到opt目录下的java目录中 解压缩刚才下载的jdk文件(解压到/opt/java中)。此时...

  • java/scala 获取配置文件 properties

    java获取配置文件 properties jar包的解压和压缩1、解压某个jar包:在需要解压的jar包目录下,...

  • java二十(文件的压缩和解压)

  • [java压缩与解压]

    java压缩与解压 一 概述 1.目录进入点 目录进入点是文件在压缩文件中的映射,代表压缩文件。压缩文件时,创建目...

  • java文件解压缩技术探讨

    文件解压缩技术探讨 java解压缩技术主要分为zip、gzip、tar技术等,该文章主要是阐述一下以上三种解压缩技...

  • 安装配置JDK

    安装 在/opt目录下新建java文件夹 将下载的压缩包拷贝到java文件夹中 进入java目录,解压压缩包 配置...

  • zip压缩工具、tar打包、tar打包并压缩

    65 zip压缩工具 支持压缩目录 默认不支持解压windows下的rar文件 压缩、解压缩文件 压缩、解压缩目录...

  • 10.压缩解压类

    压缩和解压类 压缩指令gzip,解压缩指令gunzipgzip 文件 // 压缩文件,只能压缩成....

  • linux压缩解压

    zip压缩解压 压缩文件 压缩目录 unzip解压缩 不重建文档的目录结构,把所有文件解压到同一目录下 将压缩文件...

  • Android反编译

    将apk文件重命名,把后缀.apk改为.zip,然后进行解压缩。 获取java源代码解压缩后里面的classes....

网友评论

      本文标题:java二十(文件的压缩和解压)

      本文链接:https://www.haomeiwen.com/subject/fkdvyxtx.html