Java文件压缩(zip,也可扩展)

使用jar:

<dependency>

    <groupId>commons-io</groupId>

    <artifactId>commons-io</artifactId>

    <version>2.6</version>

</dependency>

<dependency>

    <groupId>org.apache.commons</groupId>

    <artifactId>commons-compress</artifactId>

    <version>1.20</version>

</dependency>


待优化:

1、放到工程中需要把缓存目录写一下

2、压缩前应清楚缓存目录


亮点:

1、使用Try-with-resources

2、文件多重压缩


源代码:

import org.apache.commons.compress.archivers.ArchiveOutputStream;

import org.apache.commons.compress.archivers.ArchiveStreamFactory;

import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;

import org.apache.commons.io.FileUtils;

import org.apache.commons.io.IOUtils;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.util.Iterator;

/**

* @program: youfang

* @Date: 2020/4/9 15:59

* @Author: yangjl

* @Description:

*/

public class FileCompression {

public static void main(String[] args) {

//1 将word文件打包

//        FileCompression.zip("D:\\abd\\abd.zip", "D:\\abc", new String[]{"docx"});

        FileCompression.everyZip("D:\\abd","D:\\abc",new String[]{"docx"});

//删除目录下所有文件,请自行编写,太危险,调用delete()方法

        //2 将打包后的文件打包

        FileCompression.zip("D:\\abe\\abe.zip","D:\\abd",new String[]{"zip"});

}

/**

    * 指定目录下所有文件压缩

    *

    * @param zipPath 压缩文件路径和名称

    * @param fileDir 待压缩的目录

    * @date 2020/4/10 8:48

*/

    public static void zip(String zipPath, String fileDir, String[] suffix) {

File outFile =new File(zipPath);

try (FileOutputStream fileOutputStream =new FileOutputStream(outFile);

BufferedOutputStream bufferedOutputStream =new BufferedOutputStream(fileOutputStream);

ArchiveOutputStream outputStream =new ArchiveStreamFactory()

.createArchiveOutputStream(ArchiveStreamFactory.ZIP, bufferedOutputStream)) {

outFile.createNewFile();

Iterator files = FileUtils.iterateFiles(new File(fileDir), suffix,true);

File file;

while (files.hasNext()) {

file = files.next();

outputStream.putArchiveEntry(new ZipArchiveEntry(file, file.getName()));

IOUtils.copy(new FileInputStream(file), outputStream);

outputStream.closeArchiveEntry();

}

outputStream.finish();

}catch (Exception e) {

e.printStackTrace();

}

}

/**

    * 每一个文件进行压缩

    *

    * @param zipDir  zip压缩目录

    * @param fileDir 文件目录

    * @return

    * @date 2020/4/10 8:55

*/

    public static void everyZip(String zipDir, String fileDir, String[] suffix) {

Iterator files = FileUtils.iterateFiles(new File(fileDir), suffix,true);

File outFile;

File file;

String fileName;

while (files.hasNext()) {

if (!zipDir.endsWith(File.separator)) {

zipDir += File.separator;

}

file = files.next();

fileName = file.getName();

outFile =new File(zipDir + fileName.substring(0, fileName.indexOf(".")) +".zip");

try (FileOutputStream fileOutputStream =new FileOutputStream(outFile);

BufferedOutputStream bufferedOutputStream =new BufferedOutputStream(fileOutputStream);

ArchiveOutputStream outputStream =new ArchiveStreamFactory()

.createArchiveOutputStream(ArchiveStreamFactory.ZIP, bufferedOutputStream)) {

outFile.createNewFile();

outputStream.putArchiveEntry(new ZipArchiveEntry(file, file.getName()));

IOUtils.copy(new FileInputStream(file), outputStream);

outputStream.closeArchiveEntry();

outputStream.finish();

}catch (Exception e) {

e.printStackTrace();

}

}

}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容