打zip包,支持有空文件夹

 支持有空文件夹

 // 打包
            String url = dir0 + File.separator + dir1;
            log.info("将此文件夹打成zip包:"+url);
            String urlZip = dir0 + File.separator + dir1 + ".zip";
            File file = new File(url);
            
            // 方法2:压缩包内支持空文件夹
            ZipUtil.zip(FileUtil.file(urlZip), true, file.listFiles());

 

踩坑,不知道问什么不支持,反正没实现

/**
     * 打压缩包
     */
    public static void compress(String fromPath, String toPath) throws Exception {
        File fromFile = new File(fromPath);
        File toFile = new File(toPath);
        if (!fromFile.exists()) {
            throw new DbptException(fromPath + "不存在!");
        }
        try (FileOutputStream outputStream = new FileOutputStream(toFile); CheckedOutputStream checkedOutputStream = new CheckedOutputStream(outputStream, new CRC32()); ZipOutputStream zipOutputStream = new ZipOutputStream(checkedOutputStream)) {
            //区分重载方法,无实际意义
            String baseDir = "";
            //进行一次循环为了去除最外层文件夹
            File[] files = fromFile.listFiles();

//            ZipUtil.zip(toFile, true, files);
            for (File file : files) {
                compress(file, zipOutputStream, baseDir);
            }
        }
    }

    private static void compress(File file, ZipOutputStream zipOut, String baseDir) throws IOException {
        if (file.isDirectory()) {
            compressDirectory(file, zipOut, baseDir);
        } else {
            compressFile(file, zipOut, baseDir);
        }
    }

    private static void compressFile(File file, ZipOutputStream zipOut, String baseDir) throws IOException {
        if (!file.exists()) {
            return;
        }
        try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {
            System.out.println("baseDir + file.getName() = " + baseDir + file.getName());
            ZipEntry entry = new ZipEntry(baseDir + file.getName());
            zipOut.putNextEntry(entry);
            int count;
            byte[] data = new byte[1024];
            while ((count = bis.read(data, 0, 1024)) != -1) {
                zipOut.write(data, 0, count);
            }
        }
    }

    private static void compressDirectory(File dir, ZipOutputStream zipOut, String baseDir) throws IOException {
        System.out.println("dir.getName() = " + baseDir + File.separator + dir.getName() + File.separator);
        ZipEntry entry = new ZipEntry(baseDir + File.separator + dir.getName() + File.separator);

        zipOut.putNextEntry(entry);
        File[] files = dir.listFiles();
        if (files != null && ArrayUtils.isNotEmpty(files)) {
            for (File file : files) {
                compress(file, zipOut, baseDir + dir.getName() + File.separator);
            }
        }
    }

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ziputil.zip是一个方法或类的名称,根据提供的引用内容,可以推断出这是一个用于压缩文件的工具类或方法。根据引用中的代码片段,ziputil.zip可能是一个用来创建ZIP文件并将多个输入流添加到其中的方法。该方法接受一个含文件名列表的字符串列表和一个含输入流的列表作为参数,并将它们添加到ZIP文件中。最后,将ZIP文件写入输出流中。 根据引用的代码片段,可以看出ziputil.zip方法的大致用法如下: 1. 创建一个名为nameList的字符串列表,用于存储要添加到ZIP文件中的文件名。 2. 创建一个名为inputStreams的输入流列表,用于存储要添加到ZIP文件中的输入流。 3. 循环两次,将文件名和对应的输入流添加到nameList和inputStreams中。 4. 创建一个ZipFile对象。 5. 设置ZipFile对象的文件名列表和输入流列表。 6. 设置ZipFile对象的输出流。 7. 调用ziputil.zip方法,将输入流添加到ZIP文件中。 8. 最后,输出"完成"。 根据引用中的内容,可能还有其他与ziputil.zip方法相关的类或方法,如FileInputStream、BufferedInputStream、BufferedImage和FileChannel。这些类或方法可能在ziputil.zip方法的实现中被使用,但我们无法从引用中获得更多关于这些类或方法的信息。 根据引用中的内容,可以看出ziputil.zip方法可能在一个名为main的方法中被调用,并传入一个含两个URL的字符串数组作为参数。 综上所述,ziputil.zip可能是一个用于创建、添加输入流并压缩文件的工具类或方法。然而,由于缺乏完整的代码和其他引用,无法提供更具体的细节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值