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;
-
public class CompactAlgorithm {
-
File targetFile;
-
public CompactAlgorithm() {}
-
public CompactAlgorithm(File target) {
-
targetFile = target;
-
if (targetFile.exists())
-
targetFile.delete();
-
}
-
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();
-
}
-
}
-
}
-
private void compress(File file, ZipOutputStream out, String basedir) {
-
if (file.isDirectory()) {
-
this.zipDirectory(file, out, basedir);
-
} else {
-
this.zipFile(file, out, basedir);
-
}
-
}
-
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();
-
}
-
}
-
}
-
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
完整工程:https://github.com/ljheee/MyZip1.0