Я имею дело с кодом, который выполняет различные операции ввода-вывода с файлами, и я хочу, чтобы он мог обрабатывать международные имена файлов. Я работаю над Mac с Java 1.5, и если имя файла содержит символы 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
Можно ли каким-то образом решить эту проблему, либо скрыть имена файлов, либо открыть файлы по-разному?