package org.bjit.utils;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Enumeration;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
public class ZipUtil {
/**
* 功能:压缩成zip
*
* @param zipFilep
* 压缩后的zip文件名
* @param path
* 压缩路径
* @throws java.lang.Exception
*/
public boolean zip(String zipFilep, String path) {
//System.out.println("压缩文件开始.....................");
File zipFile = new File(zipFilep);
try {
if (!zipFile.exists()) {
zipFile.createNewFile();
}
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
zipFile));
write(out, path, "");
out.close();
//System.out.println("压缩文件结束!");
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* 功能:写压缩流
*
* @param out
* 压缩输出流
* @param path
* 压缩路径
* @param base
* 压缩式的基础目录
* @throws java.lang.Exception
*/
private void write(ZipOutputStream out, String path, String base)
throws Exception {
File file = new File(path);
if (file.isDirectory()) {// 文件夹,递归
base = base.length() == 0 ? "" : base + File.separator;
File[] tempFiles = file.listFiles();
for (int i = 0; i < tempFiles.length; i++) {
write(out, tempFiles[i].getPath(), base
+ tempFiles[i].getName());
}
} else {// 文件,压缩
byte[] buff = new byte[2048];
int bytesRead = -1;
ZipEntry entry = new ZipEntry(base);
out.putNextEntry(entry);
InputStream in = new BufferedInputStream(new FileInputStream(file));
while (-1 != (bytesRead = in.read(buff, 0, buff.length))) {
out.write(buff, 0, bytesRead);
}
in.close();
out.flush();
}
}
/**
* 功能:解压缩
*
* @param zipFilename
* zip文件
* @param destPath
* 解压缩路径
* @throws java.lang.Exception
*/
public void unZip(String zipFilename, String destPath) throws Exception {
System.out.println("解压文件开始.....................");
ZipFile zip = new ZipFile(zipFilename, "GB2312");
Enumeration enu = zip.getEntries();// 得到压缩文件夹中的所有文件
while (enu.hasMoreElements()) {
ZipEntry entry = (ZipEntry) enu.nextElement();
String file = destPath + entry.getName();
write(zip, entry, file);
}
System.out.println("解压文件结束!");
}
/**
* 功能:将解压缩之后的文件写入目录
*
* @param zip
* 压缩文件
* @param entry
* 压缩文件实体——压缩文件中的文件
* @param fileLocation
* 解压缩之后的文件路径
* @throws Exception
*/
private void write(ZipFile zip, ZipEntry entry, String file)
throws Exception {
if (entry.isDirectory()) {
File f = new File(file);
f.mkdirs();
} else {
File f = new File(file);
createDir(f);
FileOutputStream fos = new FileOutputStream(f);
byte[] buffer = new byte[8196];
InputStream is = zip.getInputStream(entry);
for (int len = is.read(buffer, 0, buffer.length); len != -1; len = is
.read(buffer, 0, 8196)) {
fos.write(buffer, 0, len);
}
fos.close();
}
}
/**
* 功能:创建目录
*
* @param file
* 文件或目录
*/
private void createDir(File file) {
if (file.isDirectory() && !file.exists()) {
file.mkdirs();
} else {
String path = file.getPath();
int i = path.lastIndexOf(File.separator);
path = path.substring(0, i);
new File(path).mkdirs();
}
}
/**
* 功能:测试样例
*
* @param args
*/
public static void main(String[] args) {
try {
// zip("d:\\upload.zip", "d:\\upload");
// unZip("d:\\upload.zip", "e:\\");
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
本文将详细讲解如何使用Java实现ZIP压缩包的加密与解密。 首先,我们需要理解加密的基本概念。加密是将明文数据转换为无法轻易理解的密文,以保护数据的安全性。解密则是将密文还原为原始的明文。在ZIP压缩包中,...
通过上述步骤,可以实现基于Java向ZIP压缩包追加文件的功能,虽然这个过程涉及解压和再压缩,但它是最常见的解决方案,因为Java的标准库不直接支持追加操作。在实际应用中,可以根据具体需求进行优化和调整,以满足...
java 打zip压缩包 解压缩包Eclipse项目20111011 java 打zip压缩包 解压缩包Eclipse项目20111011java 打zip压缩包 解压缩包Eclipse项目20111011
"基于Java的zip压缩包查看程序源码.zip" 提供了这样的功能,让我们深入了解一下相关的Java ZIP库和实现方法。 首先,Java标准库中的`java.util.zip`包提供了处理ZIP文件和流的工具类,如`ZipEntry`、`ZipFile`和`...
java ZIP和RAR 压缩包 目录结构。 1.ant.jar 解决java自带zip不能读取中文压缩包的问题; 2.需要安装WINRAR软件,以便解压rar文件,然后获取对应目录; 3.实现在线预览压缩包目录结构的功能;
`Java++zip压缩包查看程序源码`提供了一种方式来查看和操作ZIP压缩包内的文件,这对于开发人员来说是很有用的工具。Java标准库中的`java.util.zip`包提供了处理ZIP文件所需的类和接口,如`ZipInputStream`、`...
本篇文章将详细探讨如何使用Java内置的IO流来实现文件夹的zip压缩以及zip压缩包的解压,无需依赖其他的第三方库如Apache Commons IO或JavaZip。 ### 文件夹压缩成ZIP 首先,我们需要理解如何将一个文件夹及其内容...
Java后台实现浏览器一键导出下载zip压缩包 Java后台实现浏览器一键导出下载zip压缩包是指在Java后台程序中实现浏览器一键导出下载zip压缩包的功能。这种功能可以在实际项目中发挥重要作用,例如在文件下载、数据...
JAVA源码Javazip压缩包查看程序源码
这个“基于java的zip压缩包查看程序源码.zip”文件显然包含了使用Java编写的代码,用于查看和操作ZIP压缩文件的内容。ZIP是一种常见的文件归档格式,它允许用户将多个文件和目录打包成一个单一的文件,方便存储和...
在这个场景中,我们关注的是如何使用Java来实现文件压缩包的上传以及在服务器上的解压缩。Java作为一种强大的编程语言,提供了丰富的库来支持这样的操作,特别是在涉及到SFTP(Secure File Transfer Protocol)时,...
综上所述,这个“zip压缩包查看程序”是一个使用Java语言实现的应用,能够帮助用户查看ZIP压缩包的内容。它可能通过解析ZIP文件头来获取文件列表,然后显示这些信息,或者提供更高级的功能,比如预览文件内容、搜索...
本文将详细讲解如何使用Java实现将多目录多层级的文件打成ZIP包,以及如何解压这些ZIP包。我们将主要关注`FileUtils.java`这个类,以及依赖的`commons-compress-1.1.jar`库。 `commons-compress-1.1.jar`是Apache ...
在Java中,处理zip压缩包是一项常见的任务,例如读取、创建、修改或提取压缩包内的文件。本源码提供了一个Java程序,用于查看zip压缩包的内容,这对于理解和学习如何在Java中操作zip文件非常有帮助。 在Java中,`...
在Java编程中,有时我们需要对已经存在的ZIP文件进行操作,比如替换其中的某个文件,而无需将整个ZIP文件解压后再重新压缩。这样的需求在处理大量数据或优化性能时尤其重要,因为它避免了创建临时文件和多次I/O操作...
java源码资源Java zip压缩包查看程序源码提取方式是百度网盘分享地址
使用spring boot打造文件文档在线预览项目解决方案,支持doc、docx、ppt、pptx、xls、xlsx、zip、rar、mp4,mp3以及众多类文本如txt、html、xml、java、properties、sql、js、md、json、conf、ini、vue、php、py、...
Java中递归逻辑循环调用解压zip里面所有的压缩包 Java中递归逻辑循环调用解压zip里面所有的压缩包
Java++zip压缩包查看程序源码javalearnsa资料分享