生活随笔
收集整理的這篇文章主要介紹了
java实现zip压缩文件(同一文件夹下的多个文件夹打成一个zip包)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這2個工具類都推薦使用統一個場景的不通過寫法
推薦第一種
package com
.gblfy
.test
;import java
.io
.BufferedInputStream
;
import java
.io
.File
;
import java
.io
.FileInputStream
;
import java
.io
.FileOutputStream
;
import java
.util
.zip
.CRC32
;
import java
.util
.zip
.CheckedOutputStream
;
import java
.util
.zip
.ZipEntry
;
import java
.util
.zip
.ZipOutputStream
;
public class ZipCompressor {static final int BUFFER
= 8192;private File zipFile
;public ZipCompressor(String pathName
) {zipFile
= new File(pathName
);}public void compress(String
... pathName
) {ZipOutputStream out
= null
;try {FileOutputStream fileOutputStream
= new FileOutputStream(zipFile
);CheckedOutputStream cos
= new CheckedOutputStream(fileOutputStream
,new CRC32());out
= new ZipOutputStream(cos
);String basedir
= "";for (int i
= 0; i
< pathName
.length
; i
++) {compress(new File(pathName
[i
]), out
, basedir
);}out
.close();} catch (Exception e
) {throw new RuntimeException(e
);}}private void compress(File file
, ZipOutputStream out
, String basedir
) {if (file
.isDirectory()) {System
.out
.println("壓縮:" + basedir
+ file
.getName());this.compressDirectory(file
, out
, basedir
);} else {System
.out
.println("壓縮:" + basedir
+ file
.getName());this.compressFile(file
, out
, basedir
);}}private void compressDirectory(File dir
, ZipOutputStream out
, String basedir
) {if (!dir
.exists()) {System
.out
.println("壓縮目錄不存在,請核實!");return;}File
[] files
= dir
.listFiles();for (int i
= 0; i
< files
.length
; i
++) {compress(files
[i
], out
, basedir
+ dir
.getName() + "/");}}private void compressFile(File file
, ZipOutputStream out
, String basedir
) {if (!file
.exists()) {System
.out
.println("壓縮文件不存在,請核實!");return;}try {BufferedInputStream bis
= new BufferedInputStream(new FileInputStream(file
));ZipEntry entry
= new ZipEntry(basedir
+ file
.getName());out
.putNextEntry(entry
);int count
;byte data
[] = new byte[BUFFER
];while ((count
= bis
.read(data
, 0, BUFFER
)) != -1) {out
.write(data
, 0, count
);}bis
.close();} catch (Exception e
) {throw new RuntimeException(e
);}}public void compress(String srcPathName
) {File file
= new File(srcPathName
);if (!file
.exists()) {throw new RuntimeException(srcPathName
+ "不存在!");}try {FileOutputStream fileOutputStream
= new FileOutputStream(zipFile
);CheckedOutputStream cos
= new CheckedOutputStream(fileOutputStream
,new CRC32());ZipOutputStream out
= new ZipOutputStream(cos
);String basedir
= "";compress(file
, out
, basedir
);out
.close();} catch (Exception e
) {throw new RuntimeException(e
);}}public static void main(String
[] args
) {ZipCompressor zc
= new ZipCompressor("D:/resource.zip");String b
= "D:\\1.jpg";zc
.compress(b
);}
}
package com
.gblfy
.test
;import java
.io
.BufferedInputStream
;
import java
.io
.File
;
import java
.io
.FileInputStream
;
import java
.io
.FileOutputStream
;
import java
.util
.zip
.CRC32
;
import java
.util
.zip
.CheckedOutputStream
;
import java
.util
.zip
.ZipEntry
;
import java
.util
.zip
.ZipOutputStream
;
public class ZipCompressor2 {static final int BUFFER
= 8192;public void compress(String pathName
, String zipFileName
) {ZipOutputStream out
= null
;try {FileOutputStream fileOutputStream
= new FileOutputStream(zipFileName
);CheckedOutputStream cos
= new CheckedOutputStream(fileOutputStream
,new CRC32());out
= new ZipOutputStream(cos
);String basedir
= "";compress(new File(pathName
), out
, basedir
);out
.close();} catch (Exception e
) {throw new RuntimeException(e
);}}private void compress(File file
, ZipOutputStream out
, String basedir
) {if (file
.isDirectory()) {System
.out
.println("壓縮:" + basedir
+ file
.getName());this.compressDirectory(file
, out
, basedir
);} else {System
.out
.println("壓縮:" + basedir
+ file
.getName());this.compressFile(file
, out
, basedir
);}}private void compressDirectory(File dir
, ZipOutputStream out
, String basedir
) {if (!dir
.exists()) {System
.out
.println("壓縮目錄不存在,請核實!");return;}File
[] files
= dir
.listFiles();for (int i
= 0; i
< files
.length
; i
++) {compress(files
[i
], out
, basedir
+ dir
.getName() + "/");}}private void compressFile(File file
, ZipOutputStream out
, String basedir
) {if (!file
.exists()) {System
.out
.println("壓縮文件不存在,請核實!");return;}try {BufferedInputStream bis
= new BufferedInputStream(new FileInputStream(file
));ZipEntry entry
= new ZipEntry(basedir
+ file
.getName());out
.putNextEntry(entry
);int count
;byte data
[] = new byte[BUFFER
];while ((count
= bis
.read(data
, 0, BUFFER
)) != -1) {out
.write(data
, 0, count
);}bis
.close();} catch (Exception e
) {throw new RuntimeException(e
);}}public void compressFile(String srcPathName
, String zipName
) {File file
= new File(srcPathName
);if (!file
.exists()) {throw new RuntimeException(srcPathName
+ "不存在!");}try {FileOutputStream fileOutputStream
= new FileOutputStream(zipName
);CheckedOutputStream cos
= new CheckedOutputStream(fileOutputStream
,new CRC32());ZipOutputStream out
= new ZipOutputStream(cos
);String basedir
= "";compress(file
, out
, basedir
);out
.close();} catch (Exception e
) {throw new RuntimeException(e
);}}public static void main(String
[] args
) {ZipCompressor2 zc
= new ZipCompressor2();String b
= "D:\\1\\";String zipName
= "D:\\www.zip";zc
.compress(b
, zipName
);}
}
總結
以上是生活随笔為你收集整理的java实现zip压缩文件(同一文件夹下的多个文件夹打成一个zip包)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。