我正在处理使用文件执行各种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
}
}
Run Code Online (Sandbox Code Playgroud)
我实际处理的大部分代码都是以下形式:
FileInputStream instream = new FileInputStream(new File("???.gif"));
// operations follow
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题,要么转义文件名,要么以不同的方式打开文件?