ファイルに対してさまざまな 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
ファイル名をエスケープするか、別の方法でファイルを開くなど、この問題に対処する方法はありますか?