java文件名中不能包含的字符,使用Java 7编写包含非英语字符的文件名时,zip条目不正确...
我正在尝试开发可以处理具有非英文字符(变音符号,阿拉伯语等)的压缩文件的代码,但压缩文件包含不正确的名称.我使用的是java版本1.7.0_45因此它不应该是由于here提到的错误.我正在为ZipOutputStream构造函数将字符集设置为UTF-8,并且根据Javadocs它应该按照我的要求工作.
我确信zip文件正在正确写入,因为尝试从文件中读取条目会提供正确的文件名(如预期的那样).
但是,当我尝试使用Ubuntu默认的ArchiveManager / Unzip工具打开/解压缩时,文件名会混乱.
这是我的代码:
private void convertFilesToZip(List files) {
FileInputStream inputStream = null;
try {
byte[] buffer = new byte[1024];
FileOutputStream fileOutputStream = new FileOutputStream("zipFile.zip");
ZipOutputStream outputStream = new ZipOutputStream(fileOutputStream, Charset.forName("UTF-8"));
for (File file : files) {
inputStream = new FileInputStream(file);
String filename = file.getName();
System.out.println("Adding file : " + filename);
outputStream.putNextEntry(new ZipEntry(filename));
int length;
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
outputStream.closeEntry();
}
if(inputStream != null) inputStream.close();
outputStream.close();
System.out.println("Zip created successfully");
System.out.println("=======================================================");
System.out.println("Reading zip Entries");
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(new File("zipFile.zip")), Charset.forName("UTF-8"));
ZipEntry zipEntry;
while((zipEntry=zipInputStream.getNextEntry())!=null){
System.out.println(zipEntry.getName());
zipInputStream.closeEntry();
}
zipInputStream.close();
} catch (IOException exception) {
exception.printStackTrace();
}
}
文件的输出如下:
Adding file : umlaut_ḧ.txt
Adding file : ذ ر ز س ش ص ض.txt
Adding file : äǟc̈ḧös̈ ẗǚẍŸ_uploadFile4.txt
Adding file : pingüino.txt
Adding file : ÄÖÜäöüß- Español deEspaña.ppt
Zip created successfully
=======================================================
Reading zip Entries
umlaut_ḧ.txt
ذ ر ز س ش ص ض.txt
äǟc̈ḧös̈ ẗǚẍŸ_uploadFile4.txt
pingüino.txt
ÄÖÜäöüß- Español deEspaña.ppt
有没有人成功实现了我希望在这里实现的目标.
有人能指出我可能错过的或者做错了.我做了所有谷歌我甚至尝试过Apache Commons Compress但仍然没有运气.
它在bug报告中提到在Java 7中解决了bug,那么为什么代码不能正常工作.
任何帮助都非常感谢.提前致谢.
java文件名中不能包含的字符,使用Java 7编写包含非英语字符的文件名时,zip条目不正确...相关推荐
- java throwable判断,判断(2分) Java语言中的所有异常类都是java.lang.Throwable的子类。...
判断(2分) Java语言中的所有异常类都是java.lang.Throwable的子类. 更多相关问题 This artical is probably ________. 某企业2010年12月3 ...
- java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?
java 线程中创建线程 在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为Concurren ...
- java语言中声明布尔型_【Java初探02】——Java语言基础
本篇博文就Java语言的一些基本元素进行一些记录和阐述,主要讲解一下Java语言的一些基本构成元素和Java的主类结构. Java语言基础的大致组成 java主类结构 基本的数据类型 变量与常量 运算 ...
- java 路径中代替斜杠_老生常谈java路径中的反斜杠和斜杠的区别
JAVA中的斜杠 有正斜杠与反斜杠之分,正斜杠,一般就叫做斜杠,符号为"/":反斜杠的符号为"\". 斜杠(/)在JAVA中没有什么特别的意义,就是代表一个字符 ...
- java爬虫中split的使用_关于java中split的使用
之前在http://shukuiyan.iteye.com/blog/507915文中已经叙述过这个问题,但是最近一次笔试中居然有碰到了这个知识点,而且还做错了,囧!学艺不精啊.题目大概是这样的: J ...
- java语言中解释方式是什么意思,Java语言快速入门·简答T
1 面向对象与面向过程有什么区别? 面向对象编程:既然面向的是对象,那么强调的自然就是--对象,那么对象多了,就会抽象出相应的类(对象是类的实例化),所以 · 程序是由类组成 · 程序运行的时候去调用 ...
- java项目中多个定时器_在java项目中如何使用Timer定时器
在java项目中如何使用Timer定时器 发布时间:2020-11-16 16:36:16 来源:亿速云 阅读:97 作者:Leah 在java项目中如何使用Timer定时器?很多新手对此不是很清楚, ...
- java代码中执行sql报错:java.sql.SQLException: ORA-00923: 未找到要求的 FROM 关键字
最近写了特别多的数据库同步接口,需要在java程序中拼接大段的sql,然后再提交执行,出现了很多次ORA-00923错误,都有点见怪不怪了. 比如下面这段代码,在执行 db.execute(inser ...
- java文件中获取创建日期_如何在Java中获取文件的上次修改日期
java文件中获取创建日期 Sometimes we need to get the file last modified date in Java, usually for listeners li ...
最新文章
- android studio 制作表格_红爆网络的旅游排行榜视频制作其实很简单,赶快动手尝试...
- 一种用javascript实现的比较兼容的回到顶部demo + 阻止事件冒泡
- ubuntu server 14.10 安装 nodejs
- 标注所有线段的lisp程序源码_仪表进近图剖面图的详解(五)进近程序高度限制...
- Galaxy Note 20新爆料:至少有两款机型,处理器高低配
- Tricks(二十五)—— decorator(在函数调用前后打印日志)
- Intent详解及其用法
- 【wpf】Page的Unloaded事件
- linux下用vi,vim编辑时退出编辑模式(wq)无法保存退出
- 使用endnote在毕业论文中插入文献
- 高速信号的完整性分析
- 姚晨为何可以新浪微博排名第一
- 计算机桌面怎么能添加文字,怎么在电脑桌面上添加文字
- qt中QPushbutton出现保持按下的效果并且出现一组中同时出现互斥的效果
- 老师教我们用计算机画画就是彩虹,拼音ang、eg、ing、ong教学课件.ppt
- OpenGL学习笔记(一):环境搭建、三维空间坐标系理解以及OpenGL的基本使用
- Baxter实战——baxter摇摆起来(打开gazebo进入baxter仿真)
- 遗传转化在大豆研究中的应用(转录因子E1与大豆叶片形态)
- Web调用电脑摄像头【实时画面、拍照、截图】
- Dinic算法(C语言)
热门文章
- 利用sobel算子提取图像的水平特征和竖直特征
- C++ STL string字符串内容修改和替换
- [Python] 生成迭代器 iter() 函数
- Airflow集成在线编写创建dag的插件
- k3s 部署, 使用注意事项
- WebStorm连接Github教程
- WordPress 在function.php 文件中方法中the_XXX方法失效
- HDU 1010 深搜+奇偶剪枝
- Sqlserver2008 数据库镜像会话的初始连接
- 编译安装imagick出错:make: *** [imagick_class.lo] Error 1