Java實現zip檔案壓縮(單個檔案、資料夾以及檔案和資料夾的組合壓縮)
Java實現zip檔案壓縮(單個檔案、資料夾以及檔案和資料夾的組合壓縮)
2016年10月04日 23:22:24 ljheee 閱讀數:13215 標籤: 壓縮javazip 更多
個人分類: Java應用
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/ljheee/article/details/52736035
Java實現zip檔案壓縮(單個檔案、資料夾以及檔案和資料夾的組合壓縮)
-
package com.ljheee.ziptool.core;
-
import java.io.File;
-
import java.io.FileInputStream;
-
import java.io.FileOutputStream;
-
import java.io.IOException;
-
import java.util.zip.ZipEntry;
-
import java.util.zip.ZipOutputStream;
-
/**
-
* 壓縮演算法類
-
* 實現檔案壓縮,資料夾壓縮,以及檔案和資料夾的混合壓縮
-
* @author ljheee
-
*
-
*/
-
public class CompactAlgorithm {
-
/**
-
* 完成的結果檔案--輸出的壓縮檔案
-
*/
-
File targetFile;
-
public CompactAlgorithm() {}
-
public CompactAlgorithm(File target) {
-
targetFile = target;
-
if (targetFile.exists())
-
targetFile.delete();
-
}
-
/**
-
* 壓縮檔案
-
*
-
* @param srcfile
-
*/
-
public void zipFiles(File srcfile) {
-
ZipOutputStream out = null;
-
try {
-
out = new ZipOutputStream(new FileOutputStream(targetFile));
-
if(srcfile.isFile()){
-
zipFile(srcfile, out, "");
-
} else{
-
File[] list = srcfile.listFiles();
-
for (int i = 0; i < list.length; i++) {
-
compress(list[i], out, "");
-
}
-
}
-
System.out.println("壓縮完畢");
-
} catch (Exception e) {
-
e.printStackTrace();
-
} finally {
-
try {
-
if (out != null)
-
out.close();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
/**
-
* 壓縮資料夾裡的檔案
-
* 起初不知道是檔案還是資料夾--- 統一呼叫該方法
-
* @param file
-
* @param out
-
* @param basedir
-
*/
-
private void compress(File file, ZipOutputStream out, String basedir) {
-
/* 判斷是目錄還是檔案 */
-
if (file.isDirectory()) {
-
this.zipDirectory(file, out, basedir);
-
} else {
-
this.zipFile(file, out, basedir);
-
}
-
}
-
/**
-
* 壓縮單個檔案
-
*
-
* @param srcfile
-
*/
-
public void zipFile(File srcfile, ZipOutputStream out, String basedir) {
-
if (!srcfile.exists())
-
return;
-
byte[] buf = new byte[1024];
-
FileInputStream in = null;
-
try {
-
int len;
-
in = new FileInputStream(srcfile);
-
out.putNextEntry(new ZipEntry(basedir + srcfile.getName()));
-
while ((len = in.read(buf)) > 0) {
-
out.write(buf, 0, len);
-
}
-
} catch (Exception e) {
-
e.printStackTrace();
-
} finally {
-
try {
-
if (out != null)
-
out.closeEntry();
-
if (in != null)
-
in.close();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
/**
-
* 壓縮資料夾
-
* @param dir
-
* @param out
-
* @param basedir
-
*/
-
public void zipDirectory(File dir, ZipOutputStream out, String basedir) {
-
if (!dir.exists())
-
return;
-
File[] files = dir.listFiles();
-
for (int i = 0; i < files.length; i++) {
-
/* 遞迴 */
-
compress(files[i], out, basedir + dir.getName() + "/");
-
}
-
}
-
//測試
-
public static void main(String[] args) {
-
File f = new File("E:/Study/Java");
-
new CompactAlgorithm(new File( "D:/test",f.getName()+".zip")).zipFiles(f);
-
}
-
}
完整工程實現介面化,通過介面完成對檔案的壓縮和解壓,如下圖:
Java實現zip檔案解壓[到指定目錄]:http://blog.csdn.net/ljheee/article/details/52736091