3

我有一个压缩给定目录的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。

4

2 回答 2

2

您需要设置file.encodingJVM 的系统属性

-Dfile.encoding=UTF-8

请注意,这必须在启动时作为java参数完成。稍后使用 a 执行此System.setProperty()操作将无济于事,因为到那时该值(来自主机操作系统)已经被缓存。

于 2013-08-13T09:47:47.947 回答
0

我不确定它是否有效,但尝试使用:

Ä, ä -> \u00c4, \u00e4
Ö, ö -> \u00d6, \u00f6
Ü, ü -> \u00dc, \u00fc

在正确的位置用 \u 替换 äöü,例如:

for (File file : files) {
    String newfilename = file.getName().replace('Ü', \u00dc);
}

如果这不起作用,我很抱歉!

于 2013-08-13T09:38:00.690 回答