我正在处理对文件执行各种 IO 操作的代码,并且我想让它能够处理国际文件名。我在使用 Java 1.5 的 Mac 上工作,如果文件名包含需要代理的 Unicode 字符,则 JVM 似乎无法找到该文件。例如,我的测试文件是:
"草鷗外.gif"
它被分解成 Java 字符\u8349\uD85B\uDFF6\u9DD7\u5916.gif
如果我从这个文件名创建一个文件,我无法打开它,因为我得到一个 FileNotFound 异常。即使在包含该文件的文件夹上使用它也会失败:
File[] files = folder.listFiles();
for (File file : files) {
if (!file.exists()) {
System.out.println("Failed to find File"); //Fails on the surrogate filename
}
}
我实际处理的大部分代码都是以下形式:
FileInputStream instream = new FileInputStream(new File("草鷗外.gif"));
// operations follow
有什么方法可以解决这个问题,要么转义文件名,要么以不同的方式打开文件?