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

Java ZIP压缩详解
本文详细介绍了一种使用Java实现ZIP文件压缩的方法,包括单个文件、整个文件夹以及文件与文件夹混合的压缩过程。提供了完整的代码示例,展示了如何利用Java的ZipOutputStream类来创建压缩文件,以及如何处理文件和目录的递归压缩。
1万+

被折叠的 条评论
为什么被折叠?



