JAVA压缩/解压ZIP/7Z文件(by Apache Commons Compress)
前言
目前手中有個項目,需要做到用戶打包圖片上傳處理的邏輯,這個時候,就需要用到一個JAVA的壓縮/解壓庫Apache Commons Compress 。
- 從壓縮文件中逐個讀取文件(廢話,肯定從里面讀啦)。
- 讀取文件的文件名進行業務邏輯判斷(文件名跟業務編號有關)。
- 上傳之后返回一個信息說哪些成功、哪些失敗、哪些異常或沒有權限。
WHats Apache Commons Compress?
Apache Commons Compress,Compress是ApacheCommons提供壓縮、解壓縮文件的類庫,定義了一個用于處理ar,cpio,Unix dump,tar,zip,gzip,XZ,Pack200,bzip2、7z,arj,lzma,snappy,DEFLATE,lz4,Brotli,Zstandard,DEFLATE64和Z文件的API ,非常強大。
官網 http://commons.apache.org/proper/commons-compress/
POM.xml
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress --> <dependency><groupId>org.apache.commons</groupId><artifactId>commons-compress</artifactId><version>1.20</version> </dependency>核心代碼
假設文件以及成功上傳到目標文件夾(本文不涉及上傳,只講解解壓)
ArchiveInputStream archiveInputStream = factory.createArchiveInputStream(ArchiveStreamFactory.ZIP,inputStream);
代表解壓ZIP文件,也支持一下文件:
業務代碼:
效果查看
前端可以顯示什么上傳成功
上傳目錄可以看到成功的文件已經解壓,其它不需要處理的文件已經忽略。
關于ArchiveStreamFactory
關于ArchiveStreamFactory的信息,可以在一下javadoc中找到,包含解壓zip壓縮包和壓縮成zip安裝包。
#ClassInfo public class ArchiveStreamFactory extends java.lang.Object implements ArchiveStreamProvider#Description: Factory to create Archive[In|Out]putStreams from names or the first bytes of the InputStream. In order to add other implementations, you should extend ArchiveStreamFactory and override the appropriate methods (and call their implementation from super of course). ### Compressing a ZIP-File:final OutputStream out = Files.newOutputStream(output.toPath());ArchiveOutputStream os = new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.ZIP, out);os.putArchiveEntry(new ZipArchiveEntry("testdata/test1.xml"));IOUtils.copy(Files.newInputStream(file1.toPath()), os);os.closeArchiveEntry();os.putArchiveEntry(new ZipArchiveEntry("testdata/test2.xml"));IOUtils.copy(Files.newInputStream(file2.toPath()), os);os.closeArchiveEntry();os.close();### Decompressing a ZIP-File:final InputStream is = Files.newInputStream(input.toPath());ArchiveInputStream in = new ArchiveStreamFactory().createArchiveInputStream(ArchiveStreamFactory.ZIP, is);ZipArchiveEntry entry = (ZipArchiveEntry)in.getNextEntry();OutputStream out = Files.newOutputStream(dir.toPath().resolve(entry.getName()));IOUtils.copy(in, out);out.close();in.close();總結
以上是生活随笔為你收集整理的JAVA压缩/解压ZIP/7Z文件(by Apache Commons Compress)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win10安装程序提示“不能打开要写入的
- 下一篇: Mac如何连接远程服务器