美文网首页
java压缩zip

java压缩zip

作者: 年少懵懂丶流年梦 | 来源:发表于2018-04-24 08:30 被阅读13次

compile 'org.apache.ant:ant:1.10.2'

/**
     * 使用GBK编码可以避免压缩中文文件名乱码
     */
    private static final String CHINESE_CHARSET = "GBK";

    /**
     * 文件读取缓冲区大小
     */
    private static final int CACHE_SIZE = 1024;
    /**
     * <p>
     * 压缩文件
     * </p>
     *
     * @param sourceFolder 需压缩文件 或者 文件夹 路径
     * @param zipFilePath 压缩文件输出路径
     * @throws Exception
     */
    public static void zip(String sourceFolder, String zipFilePath) throws Exception {
        OutputStream out = new FileOutputStream(zipFilePath);
        BufferedOutputStream bos = new BufferedOutputStream(out);
        ZipOutputStream zos = new ZipOutputStream(bos);
        // 解决中文文件名乱码
        zos.setEncoding(CHINESE_CHARSET);
        File file = new File(sourceFolder);
        String basePath = null;
        if (file.isDirectory()) {
            basePath = file.getPath();
        } else {
            basePath = file.getParent();
        }
        zipFile(file, basePath, zos);
        zos.closeEntry();
        zos.close();
        bos.close();
        out.close();
    }

    /**
     * <p>
     * 递归压缩文件
     * </p>
     *
     * @param parentFile
     * @param basePath
     * @param zos
     * @throws Exception
     */
    private static void zipFile(File parentFile, String basePath, ZipOutputStream zos) throws Exception {
        File[] files = new File[0];
        if (parentFile.isDirectory()) {
            files = parentFile.listFiles();
        } else {
            files = new File[1];
            files[0] = parentFile;
        }
        String pathName;
        InputStream is;
        BufferedInputStream bis;
        byte[] cache = new byte[CACHE_SIZE];
        for (File file : files) {
            if (file.isDirectory()) {
                basePath = basePath.replace('\\', '/');
                if(basePath.substring(basePath.length()-1).equals("/")){
                    pathName = file.getPath().substring(basePath.length()) + "/";
                }else{
                    pathName = file.getPath().substring(basePath.length() + 1) + "/";
                }

                zos.putNextEntry(new org.apache.tools.zip.ZipEntry(pathName));
                zipFile(file, basePath, zos);
            } else {
                pathName = file.getPath().substring(basePath.length()) ;
                pathName = pathName.replace('\\', '/');
                if(pathName.substring(0,1).equals("/")){
                    pathName = pathName.substring(1);
                }

                is = new FileInputStream(file);
                bis = new BufferedInputStream(is);
                zos.putNextEntry(new org.apache.tools.zip.ZipEntry(pathName));
                int nRead = 0;
                while ((nRead = bis.read(cache, 0, CACHE_SIZE)) != -1) {
                    zos.write(cache, 0, nRead);
                }
                bis.close();
                is.close();
            }
        }
    }

相关文章

  • java压缩zip

    compile 'org.apache.ant:ant:1.10.2'

  • day14 -文件压缩

    《 文件压缩 》zip压缩 格式 压缩工具 .zip ...

  • linux常用命令

    **打包压缩** 安装zip yum install -y unzip zip; 压缩:zip -r 1.zip ...

  • 解压命令

    .zip压缩:zip firename.zip dirname解压缩:unzip firename.zip .g...

  • 2018-03-20 Json数据压缩

    使用GZIP对Json进行压缩与解压缩,主要用到java.util.zip.GZIPInputStream和jav...

  • Liunx----------------压缩与打包

    一、压缩 1.zip格式压缩 压缩命令: 1).zip 压缩文件名 压缩源文件.例: zip hr.zio zb...

  • Linux基础04

    Linux压缩命令 .zip格式压缩 实例:压缩文件 zip 压缩文件名 原文件 实例:压缩文件夹 zip -r ...

  • 2018-10-09

    10月8日任务 6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩 6.5 zip压缩工具 zip压缩...

  • golang文件的压缩与解压

    判断是否是zip文件 解压缩zip文件 压缩成zip文件

  • linux常用命令

    压缩与解压文件 zip zip -r ./.zip ./*压缩当前文件夹下所有文件 -r代表递归压缩,...

网友评论

      本文标题:java压缩zip

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