Java实现zip文件压缩(单个文件、文件夹以及文件和文件夹的组合压缩)
Java实现zip文件压缩(单个文件、文件夹以及文件和文件夹的组合压缩)
2016年10月04日 23:22:24 ljheee 阅读数:13215 标签: 压缩javazip 更多
个人分类: Java应用
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.****.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.****.net/ljheee/article/details/52736091