转载于
http://blog.sina.com.cn/s/blog_4b6f8d150100kyzc.html
由于项目里需要做一个将文件夹压缩的功能,由于文件夹中的文件都是中文名称,所以java.util.zip压缩后的文件名都是变成了“乱码”。
解决方法有二:
其一,修改源码
参考
http://nopainnogain.javaeye.com/blog/616436
其二,用ant.jar包里面的org.apache.tools.zip代替java.util.zip
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
public static void write(File path, File zipFile) throws IOException {
ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(zipFile));
zip.setEncoding("GBK"); //这行代码就是解决中文文件名的关键
Util.write(path, path, zip);
zip.close();
}
private static void write(File base, File path, ZipOutputStream zip) throws IOException {
URI rel = base.toURI().relativize(path.toURI());
if (path.isDirectory()) {
ZipEntry entry = new ZipEntry(rel.getPath());
entry.setUnixMode(755);
zip.putNextEntry(entry);
zip.closeEntry();
File[] files = path.listFiles();
for (File file : files) {
write(base, file, zip);
}
} else {
ZipEntry entry = new ZipEntry(rel.getPath());
entry.setUnixMode(644);
zip.putNextEntry(entry);
FileInputStream is = new FileInputStream(path);
zip.write(IOUtils.toByteArray(is));
is.close();
zip.closeEntry();
}
}
参考
http://www.javaeye.com/topic/349790
在 windows 下进行 zip,然后在 linux 下 unzip,中文的文件名会乱码。
网上一般的解决办法是重新编译 unzip 来绕过去。
我查了一下,可以通过 entry.setUnixMode 的方式,将 platform 设置为 Unix,如下:
Java代码
public void setUnixMode(int mode) {
// CheckStyle:MagicNumberCheck OFF - no point
setExternalAttributes((mode << 16)
// MS-DOS read-only attribute
| ((mode & 0200) == 0 ? 1 : 0)
// MS-DOS directory flag
| (isDirectory() ? 0x10 : 0));
// CheckStyle:MagicNumberCheck ON
platform = PLATFORM_UNIX;
}
这样在解压的时候,就不需要绕过去了。
分享到:
相关推荐
项目中碰到问题.jdk zipEntry 压缩中文文件名乱码 上网查了下,有两种方法,一种修改jdk ZipInputStream及ZipOutputStream 的源文件,比较麻烦,不建议此项. 第二种 就是拿来主义,因为 开源项目 Ant 里已经有...
总的来说,解决乱码问题通常需要从数据来源、传输过程、页面渲染和编码设置等多个角度来排查。通过以上步骤,基本可以解决layui组件中出现的乱码问题。在实际开发过程中,规范编码习惯和统一编码标准是避免这类问题...
`java zip 打包`这个话题聚焦于如何使用Java来创建ZIP归档,以及如何处理中文文件名的乱码问题。Apache Ant的`ant.jar`库提供了强大的构建工具,它包含了一系列用于处理文件打包的实用程序,其中包括对ZIP格式的支持...
本文将深入探讨如何使用ZipOutputStream进行文件压缩,并解决可能出现的乱码问题。 首先,我们来看`ZipOutputStream`的基本用法。这个类继承自`FilterOutputStream`,提供了创建ZIP文件的功能。以下是一个简单的...
在android开发中,有时候需要将文件打包成zip或将zip解压,如果直接用java.util.zip包下面的类会出现中文乱码,如果直接用org.apache.tools.zip(ant包中的压缩功能)会影响项目的编译时间; 故将ant包中文件瘦身,既...
总之,读取ZIP文件并解析其中的中文文件名和内容,需要理解文件的编码原理,选择合适的库和方法,以及正确地处理可能出现的乱码问题。通过上述步骤,我们可以高效、准确地处理像支付宝对账单这样的数据,为数据分析...
这里我们关注的是“文件解压和压缩”以及处理“中文乱码”的问题。在Java编程语言中,提供了多种库和工具来处理这些问题。 首先,`CompresszZipFile`是一个可能的自定义类或方法,它专门用于处理ZIP文件的解压。在...
ZIP是一种流行的文件存档格式,它允许将多个文件和目录打包成一个单一的文件。ZIP文件内部包含了一个或多个经过压缩的数据块,每个数据块对应源文件的一部分。ZIP支持多种压缩算法,如Deflate和BZip2,其中Deflate是...
在处理乱码问题时,这通常不会直接影响到文本编码,但在打包或发布软件时,可能需要考虑不同系统环境下的编码兼容性。 "obj"和"bin"目录是编译过程产生的中间文件和可执行文件。虽然它们不直接涉及编码问题,但...
java压缩中文处理使用org.apache.tools.zip已经打包成jar 只要放在LIB文件夹下,然后在JSP 或 JAVA 里引用即可。 *,java.io.*,org.apache.tools.zip.Zip" pageEncoding="GBK"%> out.println("正在备份网站..."); ...
标题中提到的"AutoJS 4.1.1 打包插件.zip",指的是AutoJS的一个特定版本4.1.1的打包工具或插件。这个插件可能是用于将AutoJS脚本打包成独立的应用程序,使得用户可以分享或者在没有安装AutoJS环境的设备上运行这些...
### 装界面乱码问题解决方法 #### 知识点概述 在Linux系统中安装Oracle数据库时,可能会遇到安装界面出现乱码的问题。本文将详细介绍导致这一问题的原因及具体的解决步骤。 #### 问题背景 当我们在Linux环境下...
2. **处理中文乱码**:在处理非ASCII字符,特别是中文字符时,可能出现乱码问题。解决这个问题的关键在于设置正确的编码。在创建`ZipEntry`时,需要指定文件名的编码,通常为`"UTF-8"`,例如:`new ZipEntry(new ...
ZIP是一种广泛使用的档案格式,它允许将多个文件和目录打包成一个单一的文件,以便于存储和传输。ZIP文件内部通常使用UTF-8编码来存储文件名和路径,但并非所有ZIP工具都遵循这个标准,有的可能使用本地操作系统默认...
尝试使用支持多种编码的工具,如7-Zip,它通常能更好地处理中文乱码问题。你可以在设置中调整解压时使用的字符编码。 3. **修改文件名编码**:如果问题出在文件名上,可能需要手动修改文件的内部编码。可以使用支持...
总结来说,通过Ant或直接使用Java API,我们都能实现创建ZIP文件并解决中文乱码问题。关键在于设置正确的编码(如UTF-8)以及正确使用`ZipOutputStream`。对于Ant,可以在任务中设置`encoding`属性;对于Java代码,...
修正上一个文件乱码问题,重传, 上一个文件: 14本经典android开发教程 http://download.csdn.net/detail/cleopard/5729507 另外 88个经典Android应用程序打包[源代码] ...
在本案例中,"错误归类学习.zip_ant脚本打包"的标题暗示了用户在使用Ant脚本来打包项目时遇到了问题,特别是涉及到调用Web服务(Webservice)时出现了错误。 描述中提到的“ant脚本打包的时候运行访问Webservice是...
可解决Unity工程打包 exe 后,执行出现中文乱码问题,只需放在...比如:Unity在编辑模式下调用 ICSharpCode.SharpZipLib.dll 解压zip文件时,zip文件中的中文名称不会有乱码问题,但打包为exe后却有中文乱码问题。
5. **处理中文文件名**:在写入ZIP条目时,确保正确设置文件名的编码,通常使用UTF-8,以避免乱码问题。 6. **关闭流**:下载完成后,关闭所有打开的输入/输出流,确保资源得到释放。 这个过程不仅实现了文件的...