日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java实现zip压缩文件(同一文件夹下的多个文件夹打成一个zip包)

發(fā)布時(shí)間:2024/9/27 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java实现zip压缩文件(同一文件夹下的多个文件夹打成一个zip包) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這2個(gè)工具類都推薦使用統(tǒng)一個(gè)場(chǎng)景的不通過寫法
推薦第一種

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;/*** java實(shí)現(xiàn)zip壓縮文件(同一文件夾下的多個(gè)文件夾打成一個(gè)zip包)** @author gblfy* @date 2020-07-02*/ public class ZipCompressor {static final int BUFFER = 8192;private File zipFile;public ZipCompressor(String pathName) {zipFile = new File(pathName);}/*** 壓縮入口* 適配:* 1.壓縮文件* 2.壓縮文件夾** @param pathName 傳入一個(gè)或者多個(gè)文件/文件夾的絕對(duì)路徑 可變參數(shù)*/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++) {//循環(huán)遍歷傳入的文件或者文件夾的絕對(duì)路徑的 可變參數(shù)compress(new File(pathName[i]), out, basedir);}out.close();} catch (Exception e) {throw new RuntimeException(e);}}/*** 判斷傳參類型:是目錄還是文件* <p>* 1.如果是文件,則調(diào)用壓縮文件方法* 2.如果是目錄,則調(diào)用壓縮目錄方法* </p>** @param file* @param out* @param basedir*/private void compress(File file, ZipOutputStream out, String basedir) {if (file.isDirectory()) {System.out.println("壓縮:" + basedir + file.getName());//調(diào)用壓縮目錄方法this.compressDirectory(file, out, basedir);} else {System.out.println("壓縮:" + basedir + file.getName());//調(diào)用壓縮文件方法this.compressFile(file, out, basedir);}}/*** 壓縮一個(gè)目錄*/private void compressDirectory(File dir, ZipOutputStream out, String basedir) {if (!dir.exists()) {System.out.println("壓縮目錄不存在,請(qǐng)核實(shí)!");return;}File[] files = dir.listFiles();for (int i = 0; i < files.length; i++) {/* 遞歸 */compress(files[i], out, basedir + dir.getName() + "/");}}/*** 壓縮一個(gè)文件*/private void compressFile(File file, ZipOutputStream out, String basedir) {if (!file.exists()) {System.out.println("壓縮文件不存在,請(qǐng)核實(shí)!");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);}}/*** 壓縮指定文件(文件個(gè)數(shù)限定1個(gè))** @param srcPathName*/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\\";String b = "D:\\1.jpg";zc.compress(b);// zc.compress("D:\\1.jpg", "D:\\3.jpeg", "D:\\4.jpg", 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;/*** java實(shí)現(xiàn)zip壓縮文件(同一文件夾下的多個(gè)文件夾打成一個(gè)zip包)** @author gblfy* @date 2020-07-02*/ public class ZipCompressor2 {static final int BUFFER = 8192;/*** 壓縮入口* 適配:* 1.壓縮文件* 2.壓縮文件夾** @param pathName 傳入一個(gè)或者多個(gè)文件/文件夾的絕對(duì)路徑 可變參數(shù)*/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 = "";//循環(huán)遍歷傳入的文件或者文件夾的絕對(duì)路徑的 可變參數(shù)compress(new File(pathName), out, basedir);out.close();} catch (Exception e) {throw new RuntimeException(e);}}/*** 判斷傳參類型:是目錄還是文件* <p>* 1.如果是文件,則調(diào)用壓縮文件方法* 2.如果是目錄,則調(diào)用壓縮目錄方法* </p>** @param file* @param out* @param basedir*/private void compress(File file, ZipOutputStream out, String basedir) {if (file.isDirectory()) {System.out.println("壓縮:" + basedir + file.getName());//調(diào)用壓縮目錄方法this.compressDirectory(file, out, basedir);} else {System.out.println("壓縮:" + basedir + file.getName());//調(diào)用壓縮文件方法this.compressFile(file, out, basedir);}}/*** 壓縮一個(gè)目錄*/private void compressDirectory(File dir, ZipOutputStream out, String basedir) {if (!dir.exists()) {System.out.println("壓縮目錄不存在,請(qǐng)核實(shí)!");return;}File[] files = dir.listFiles();for (int i = 0; i < files.length; i++) {/* 遞歸 */compress(files[i], out, basedir + dir.getName() + "/");}}/*** 壓縮一個(gè)文件*/private void compressFile(File file, ZipOutputStream out, String basedir) {if (!file.exists()) {System.out.println("壓縮文件不存在,請(qǐng)核實(shí)!");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);}}/*** 壓縮指定文件(特殊場(chǎng)景)* 文件個(gè)數(shù)限定1個(gè)** @param srcPathName*/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";// String b = "D:\\1.jpg";zc.compress(b, zipName);// zc.compress("D:\\1.jpg", "D:\\3.jpeg", "D:\\4.jpg", b);} }

總結(jié)

以上是生活随笔為你收集整理的java实现zip压缩文件(同一文件夹下的多个文件夹打成一个zip包)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。