文件压缩(文件夹中有文件夹)

标签: 文件压缩
31人阅读 评论(0) 收藏 举报
分类:

有个朋友在我之前写的一个压缩文件里问:我这边是一个文件夹下面还有多个文件夹,像这样的怎么处理?

对于这样的问题我想到的是递归方式,为一级文件夹下面的每个文件进行判断是文件夹还是文件!

下面是详细的代码:

这里写图片描述

下面我们要对上面的情况进行压缩,代码如下:

    public static void main(String[] args) throws Exception {

        String entry = "C:\\Users\\yutao\\Desktop\\pageage\\test";//需要压缩的文件目录
        File file = new File(entry);

        ZipOutputStream zipOutput = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(file.getAbsolutePath() + ".zip")));

        String base = file.getName();

        compressZip(zipOutput, file, base);
        zipOutput.closeEntry();
        zipOutput.close();
    }

    /**
    * 因为子文件夹中可能还有文件夹,所以进行递归
    *
    */
    private static void compressZip(ZipOutputStream zipOutput, File file, String base) throws IOException {

        if(file.isDirectory()){
            File[] listFiles = file.listFiles();// 列出所有的文件

            for(File fi : listFiles){
                if(fi.isDirectory()){
                    compressZip(zipOutput, fi, base + "/" + fi.getName());
                }else{
                    zip(zipOutput, fi, base);
                }
            }
        }else{
            zip(zipOutput, file, base);
        }
    }

    /**
    * 压缩的具体操作
    *
    */
    public static void zip(ZipOutputStream zipOutput, File file, String base) throws IOException, FileNotFoundException {
        ZipEntry zEntry = new ZipEntry(base + File.separator + file.getName());
        zipOutput.putNextEntry(zEntry);

        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));

        byte[] buffer = new byte[1024];
        int read = 0;
        while((read =bis.read(buffer)) != -1){
            zipOutput.write(buffer, 0, read);
        }
        bis.close();
    }

重点:

ZipEntry其实就是即将要压缩文件的文件信息。 
假设我们即将要压缩的是ggindex.jar文件,路径是根路径。 
那么我们就要在ZipEntry对象中设置好。

ZipEntry zEntry = new ZipEntry(base + File.separator + file.getName());
zipOutput.putNextEntry(zEntry);

//根据上述的假设,我们就要这样写
ZipEntry zEntry = new ZipEntry("ggindex.jar");
zipOutput.putNextEntry(zEntry);//将其添加到压缩包中,准备进行压缩啦。

这里还要注意,ZipEntry参数base + File.separator + file.getName()是为了产生下面这样的效果。否则所有的文件都将会在根路径中。

这里写图片描述

查看评论

用zlib压缩文件夹

由于要用程序压缩一个文件夹,因此选用zlib库。在zlib中的例子程序zpipe.c中,给出了如何压缩一个文件,这里稍加扩展,对一个文件夹进行压缩。说来也简单,就是将文件夹/目录下的每个文件找到并压缩...
  • spacetiller
  • spacetiller
  • 2007-11-05 16:46:00
  • 8337

Qt将文件夹压缩成ZIP文件

在项目中需要将本地的一个文件夹上传到服务器,于是想到先将起压缩成ZIP文件,然后上传。在网上搜了一下,用Qt将文件夹压缩成ZIP文件,大概有两种方法: 1、使用 QProcess 直接调用本地的ex...
  • e5Max
  • e5Max
  • 2016-11-04 13:31:42
  • 1729

文件夹和文件压缩

///         ///功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略)         ///         ///dirPath">被压缩的文件夹夹路径     ...
  • sinat_34170721
  • sinat_34170721
  • 2016-09-01 14:24:26
  • 107

Java实现zip文件压缩(单个文件、文件夹以及文件和文件夹的组合压缩)

Java实现zip文件压缩(单个文件、文件夹以及文件和文件夹的组合压缩) package com.ljheee.ziptool.core; import java.io.File; import j...
  • ljheee
  • ljheee
  • 2016-10-04 23:22:24
  • 8345

Android--文件夹压缩为.zip

package com.zipUtil; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputS...
  • chaoyu168
  • chaoyu168
  • 2017-03-21 11:32:24
  • 856

Java代码压缩文件夹及多文件压缩---简单案例

通过Java代码实现对一个文件夹统一压缩的操作方法如下代码,也就是说可以对多个文件进行同时压缩的方式: public static void main(String[] args) {        ...
  • rogers65
  • rogers65
  • 2016-12-19 11:25:21
  • 247

[C++ zip] 如何压缩一个文件夹?

/* HZIP newZipFile = CreateZip(full_filepath_,0); ZIP_Folder(str_path, str_path, full_filepath...
  • u013317006
  • u013317006
  • 2014-01-13 19:48:47
  • 1743

java 压缩单个文件,多个文件,或者压缩文件夹

/**  * Project Name:MonitoringPlatform-commons-util  * File Name:ZipCompressing.java  * Package N...
  • qq_33212500
  • qq_33212500
  • 2017-04-20 11:36:50
  • 1533

qt 压缩解压缩文件和文件夹源码

  • 2011年10月18日 11:39
  • 73KB
  • 下载

ios压缩文件夹--基于ZipArchive

1.有问题的代码NSArray *fileList = [fileManager contentsOfDirectoryAtPath:sourcePath error:nil];// 文件列表 ...
  • u012915455
  • u012915455
  • 2016-09-12 16:55:05
  • 1266
    个人资料
    持之以恒
    等级:
    访问量: 10万+
    积分: 1465
    排名: 3万+
    最新评论