使用JAVA本身的ZIP API打包带有中文名称的文件(目录)会出现乱码,且winzip无法解压,如果要解决此问题,可以将
import java.util.zip.ZipOutputStream;
import java.util.zip.ZipEntry;
换为ant.jar中的API
/**
* 压缩文件(.zip)的函数
* @param zipDirectory:(需要)压缩的文件夹路径
* @param zipPath:文件压缩后放置的路径,该路径可以为null,null表示压缩到原文件的同级目录
* @return :返回一个压缩好的文件(File),否则返回null
*/
public File doZip(String zipDirectory, String zipPath) {
File zipDir = new File(zipDirectory);
if (zipPath == null) {
zipPath = zipDir.getParent();
}
// 压缩后生成的zip文件名
String zipFileName = zipPath + "/" + zipDir.getName() + ".zip";
try {
zipOut = new ZipOutputStream(new BufferedOutputStream(
new FileOutputStream(zipFileName)));
// 压缩文件
handleDir(zipDir, zipDir.getParent().length() + 1, zipOut);
zipOut.close();
return new File(zipFileName);
} catch (IOException e) {
logger.error(e);
e.printStackTrace();
return null;
}
}
/**
* 由doZip调用,递归完成目录文件读取
* @param dir:(需要)压缩的文件夹(File 类型)
* @param len:一个参数(记录压缩文件夹的parent路径的长度)
* @param zipOut:需要压缩进的压缩文件
* @throws IOException:如果出错,会抛出IOE异常
*/
private void handleDir(File dir, int len, ZipOutputStream zipOut)
throws IOException {
FileInputStream fileIn = null;
File[] files = dir.listFiles();
if (files != null) {
if (files.length > 0) { // 如果目录不为空,则分别处理目录和文件.
for (File fileName : files) {
if (fileName.isDirectory()) {
handleDir(fileName, len, zipOut);
} else {
fileIn = new FileInputStream(fileName);
zipOut.putNextEntry(new ZipEntry(fileName.getPath()
.substring(len).replaceAll("\\\\", "/")));
while ((readedBytes = fileIn.read(buf)) > 0) {
zipOut.write(buf, 0, readedBytes);
}
zipOut.closeEntry();
}
}
} else { // 如果目录为空,则单独创建之.
zipOut.putNextEntry(new ZipEntry(dir.getPath().substring(len)
+ "/"));
zipOut.closeEntry();
}
} else {// 如果是一个单独的文件
fileIn = new FileInputStream(dir);
zipOut.putNextEntry(new ZipEntry(dir.getPath().substring(len)));
while ((readedBytes = fileIn.read(buf)) > 0) {
zipOut.write(buf, 0, readedBytes);
}
zipOut.closeEntry();
}
}
/**
* 解压指定zip文件
* @param unZipfileName:需要解压的zip文件路径
* @param unZipPath:文件解压的路径,该路径可以为null,null表示解压到原文件的同级目录
*/
public boolean unZip(String unZipfileName, String unZipPath) {// unZipfileName需要解压的zip文件名
FileOutputStream fileOut = null;
InputStream inputStream = null;
File file = null;
if (unZipPath == null) {
unZipPath = new File(unZipfileName).getParent();
// System.out.println("1 -> " + unZipPath);
if (!(unZipPath.substring(unZipPath.length()).endsWith("/") || unZipPath
.substring(unZipPath.length()).endsWith("\\"))) {
unZipPath += "/";
}
} else {
unZipPath = new File(unZipPath).getPath() + "/";
}
try {
zipFile = new ZipFile(unZipfileName);
for (Enumeration<?> entries = zipFile.getEntries(); entries
.hasMoreElements();) {
ZipEntry entry = (ZipEntry) entries.nextElement();
int iTEMP = entry.getName().indexOf("/") + 1;
file = new File(unZipPath
+ entry.getName().substring(iTEMP,
entry.getName().length()));
if (entry.isDirectory()) {
file.mkdirs();
} else {
// 如果指定文件的目录不存在,则创建之.
File parent = file.getParentFile();
if (!parent.exists()) {
parent.mkdirs();
}
inputStream = zipFile.getInputStream(entry);
fileOut = new FileOutputStream(file);
while ((this.readedBytes = inputStream.read(this.buf)) > 0) {
fileOut.write(this.buf, 0, this.readedBytes);
}
fileOut.close();
inputStream.close();
}
}
this.zipFile.close();
return true;
} catch (IOException ioe) {
logger.error(ioe);
ioe.printStackTrace();
return false;
}
}
分享到:
相关推荐
在Java编程中,向现有的ZIP压缩包追加文件通常需要经过解压、修改、再压缩的步骤,因为标准的Java ZIP库(如`java.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...
1.将jacob-1.18.zip下载解压,在文件夹中找到jacob-1.18-x64.dll,jacob-1.18-x86.dll,jacob.jar 2.通过 pom.xml 新增 <dependency> <groupId>com.hynnet</groupId> <artifactId>jacob</artifactId> <version>...
在Java编程环境中,打包文件或文件夹是一项常见的任务,特别是在软件开发过程中,我们需要将源代码、资源文件等打包成一个可分发的格式,如.zip。在这个场景中,我们使用了Java来实现文件夹的打包功能,并且依赖了...
在Java编程语言中,压缩文件夹到指定目录和指定名称是一项常见的任务,这通常涉及到对文件系统的操作和使用压缩库。Java提供了多种方法来实现这一功能,比如使用内置的`java.util.zip`包或者第三方库如Apache ...
在Java编程环境中,将多个Excel文件打包成ZIP文件并实现下载功能是一项常见的需求,尤其是在数据导出或批量处理场景中。下面将详细讲解这个过程涉及的主要知识点。 首先,我们需要了解Java中的`java.util.zip`包,...
光线文字(33KB)<END> 2,hrwz.zip 环绕旋转字(5KB)<END> 3,kzfwz.zip 空中飞舞字(6KB)<END> 4,sdwz.zip 闪电文字(6KB)<END> 5,sjlz2.zip 数据流字(8KB)<END> 6,twfz1.zip 天外飞字1(5KB)<END> 7,twfz2.zip...
在Java编程环境中,处理文件的压缩与解压缩是常见的任务,而涉及到安全性,加密和解密就显得尤为重要。本文将详细讲解如何使用Java实现ZIP压缩包的加密与解密。 首先,我们需要理解加密的基本概念。加密是将明文...
QuaZIP是使用Qt/C++对ZLIB进行简单封装的用于压缩及解压缩ZIP的开源库.适用于多种平台,利用它可以很方便的将单个或多个文件打包为zip文件,且打包后...<4> 调用Quazip压缩文件夹和解压zip文件的例子源码(完整的项目源码)
在Java编程中,处理文件压缩和解压是常见的任务,特别是使用ZIP格式。然而,当涉及到包含中文字符的文件或目录时,可能会遇到乱码问题。这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在...
Java标准库提供了一个名为`java.util.zip`的包,该包包含了一系列类,如ZipOutputStream和GZIPOutputStream,可以用来创建ZIP和GZIP格式的压缩文件。但是,如果需要处理更复杂的任务,如批量打包,Ant则更为合适。 ...
- **创建下载链接**:通过创建一个隐藏的`<a>`标签,设置其`href`属性为ZIP文件的Blob URL,并触发点击事件,从而触发文件下载。 - **下载提示**:在用户完成文件选择并开始打包后,可以使用jQuery展示下载提示...
在这个场景中,我们关注的是如何使用Java来实现文件压缩包的上传以及在服务器上的解压缩。Java作为一种强大的编程语言,提供了丰富的库来支持这样的操作,特别是在涉及到SFTP(Secure File Transfer Protocol)时,...
你需要将`rarFilePath`替换为RAR文件的实际路径,`password`替换为RAR文件的密码,`outputDirectory`替换为你希望解压缩文件的目标目录。 为了在Windows和Linux上都能运行这段代码,确保你的项目构建是跨平台的,...
在Java编程中,处理压缩文件,如ZIP格式的文件,是一项常见的任务。本文将深入探讨如何使用Java来获取ZIP文件的名称以及如何高效地解压缩这些文件,特别是通过多线程来提高性能。 首先,我们需要引入Java的内置库`...
以下是一个简单示例,将一个目录压缩为.zip文件: ```java File dirToCompress = new File("/path/to/directory"); FileOutputStream fos = new FileOutputStream(zipFilePath); ZipOutputStream zos = new ...
在Java编程环境中,处理zip压缩文件是一项常见的任务,特别是在数据传输、备份或者打包应用程序时。本文将详细讲解如何使用zip4j库来实现对单个文件或多个文件的压缩、加密压缩以及解密压缩包的操作。 首先,zip4j...
* 使用`<zip>`元素来创建一个ZIP文件 * 使用`<manifest>`元素来定义JAR文件的清单 * 使用`<attribute>`元素来定义JAR文件的属性 * 使用`<delete>`元素来删除文件 * 使用`<mkdir>`元素来创建一个目录 这些知识点都是...
1. **打包Java项目为JAR文件** 打包Java项目通常使用Maven或Gradle等构建工具。在Maven中,可以在pom.xml文件中配置maven-jar-plugin插件。以下是一个基本配置示例: ```xml <build> <plugins> <plugin> ...
在`pom.zip`这个压缩包中,`pom.xml`文件是核心组件,它描述了项目的构建过程、依赖库以及相关的元数据。 标题中的“pom.zip_java maven_pom mainfest java_pom manifest 标签_pom 文件 mani”暗示了我们讨论的主题...