.listFiles()返回的文件对象在.exists()上返回false - 文件包含特殊字符

时间:2013-08-13 09:22:45

标签: java file special-characters readfile

我有一个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。

2 个答案:

答案 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);
}

如果那不起作用我很抱歉!