我有一个java应用程序压缩给定目录。省略包含特殊字符的文件(例如变音符号 - ä,ö等)。调试显示,文件被省略,因为它不存在
if(file.exists()) {
//zip it
} else {
System.err.println("file " + file.getAbsolutePath() + " does not exist!");
}
问题是 - 我从
中检索文件对象File[] files = directory.listFiles();
然后通过它们进行整理。
for(File file : files) {
if(file.exists()) {
//zip file
} else {
System.err.println("...");
}
}
我看到的是,file.getAbsolutePath()
向我显示了以下路径/tmp/myspecialChar?File.txt
而不是/tmp/myspecialCharÖFile.txt
。
如何获取文件的任何想法。不幸的是,所有特殊字符都会被翻译成“?”所以我无法实现映射。列表名称也返回“?”而不是正确的特殊字符。
在我忘记之前 - JVM版本是1.6.31。
答案 0 :(得分:2)
您需要设置JVM的file.encoding
系统属性
-Dfile.encoding=UTF-8
请注意,这必须在启动时以java
参数完成。稍后使用System.setProperty()
来帮助它,因为值(来自主机操作系统)已经被缓存了。
答案 1 :(得分:0)
我不确定它是否有效但尝试使用:
Ä, ä -> \u00c4, \u00e4
Ö, ö -> \u00d6, \u00f6
Ü, ü -> \u00dc, \u00fc
将äöü替换为正确位置的\ u,例如:
for (File file : files) {
String newfilename = file.getName().replace('Ü', \u00dc);
}
如果那不起作用我很抱歉!