转载于
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 里已经有...
在android开发中,有时候需要将文件打包成zip或将zip解压,如果直接用java.util.zip包下面的类会出现中文乱码,如果直接用org.apache.tools.zip(ant包中的压缩功能)会影响项目的编译时间; 故将ant包中文件瘦身,既...
使用org.apache.tools.zip.*打包,解决中文乱码问题,资源内含一简单实现和ant.jar(版本为1.9.2)
java压缩中文处理使用org.apache.tools.zip已经打包成jar 只要放在LIB文件夹下,然后在JSP 或 JAVA 里引用即可。 *,java.io.*,org.apache.tools.zip.Zip" pageEncoding="GBK"%> out.println("正在备份网站..."); ...
修正上一个文件乱码问题,重传, 上一个文件: 14本经典android开发教程 http://download.csdn.net/detail/cleopard/5729507 另外 88个经典Android应用程序打包[源代码] ...
可解决Unity工程打包 exe 后,执行出现中文乱码问题,只需放在...比如:Unity在编辑模式下调用 ICSharpCode.SharpZipLib.dll 解压zip文件时,zip文件中的中文名称不会有乱码问题,但打包为exe后却有中文乱码问题。
这个名是名离自ant原码的,由于java.util.zip处理中文文件名时有问题可以用这个包代替那个使用就不会有中文问题了,我加了一个ZipTool.java,这个就是一个示例文件和方法打包文件。 <br>特点: 一、自有原码不...
使用ZLib和minizip实现对文件夹(包括子文件夹)的压缩解压缩工具,vc6.0版
itext pdfbox 详细的例子,其中包含 读取 解析pdf wrod 生成画格子 以及解决中文乱码问题 很多例子打包成一起 详细的注释
支持webgl中文输入
本资源解决了中文乱码问题,还解决了打包文件夹中的含有空文件的问题。 本资源是从网上下载,然后进行测试,发现一些问题,然后修复,然后在测试,基本没有问题,比较适合项目使用
1、指定文件可下载并且服务器端会删除此文件。 2、指定文件夹(文件夹中必须有一个文件),程序会自动的压缩文件为 zip,然后下载删除源文件与压缩文件...注意一点:中文的文件名会出现乱码(解决方案:导入ant.jar)
输入网址可以打包整个源网站,包括js文件、html文件、css文件以及引用的图片,部分网站由于编码或者加密原因可能会导致部分文件乱码,但大部分网站都是可以轻松还原的
解包 : 拿到 APK 文件 , 如果按照 zip 格式解压出来 , xml 文件都是乱码 ; APK 文件打包时 , 会将 xml 文件进行压缩转为二进制文件 , 以减小体积 ; 解包时 , 必须使用 ApkTool 解包工具 , 将二进制数据格式的 xml ...
chrome浏览器插件,可以把网页打包到文本进行保存,非常好用,相对于各种笔记的网页简报功能更加好用,可以防止html保存不全乱码等问题。
使用electron-builder打包时必不可少的文件,请放在类似C:\Users\11596\AppData\Local\electron-builder\Cache\nsis\nsis-3.0.3.2的文件夹中!
上传、java mail和分页显示、web编程中文乱码问题及解决方案、应用程序的打包和部署等。书中还深入讲解了客户端验证框架jsvalidation、在线文本编辑器fckeditor和apache commons的一些类库等功能强大的实用开发工具...
Redhat4-update7本人亲测安装与使用的记录文档 两个需要用到的文件 readline-6.1.tar.gz rlwrap-0.18-1.i386.rpm 所以打包上传给其他同学使用。
nsis-2.46.5-Unicode-setup.exe在打包时能包含中文字符而不会出现乱码。使用与Win所有系统的打包。
3、本脚本备份输出为zip打包文件,打包文件保存在zip目录下面。 4、本脚本支持备份log保存,log保存在logs目录下。 5、本脚本支持远程备份,备份命令使用的lftp,具体细节参照lftp的使用细则,安装过程中会提示操作...