0

私は実際に特定のファイル名でファイルを作成しようとしています。問題は、ファイル名にドイツ語のウムラウトが含まれているため、常にNullPointerException.

コードは次のようになります。

File f = new File("/Volume/dir1/dir2/dirWithUmlauts");
File[] files = f.listFiles(); // NullPointerException

Windowsでも同じことをテストしましたが、動作します。Macで動かない理由がわかりません。

4

2 に答える 2

0

Mac OS がファイル システムのウムラウトをどのように扱うかはわかりません。しかし、ディレクトリが JVM の外で正しく処理できる場合は、JVM でも動作する必要があります。

そのため、ディレクトリの名前をlistFiles()1 つ上のレベルにリストしてみてください。

File d = new File("/Volume/dir1/dir2/"); 
for( File f : d.listFiles()) System.out.println(f.getName());

したがって、ファイルを開くために String がどのように見える必要があるかがわかります (また、実際に存在し、VM からアクセス可能です)。


解決:

File.listFiles() は JDK 6 で Unicode 名をマングルします (Unicode 正規化の問題)

于 2013-07-03T20:03:00.630 に答える
0

ファイルを作成しようとしていると言いますが、コードにはディレクトリの内容がリストされています。ファイルの「フォルダの内容」を(意図せずに)リストしていますか?http://docs.oracle.com/javase/7/docs/api/java/io/File.htmlによると、「この抽象パス名がディレクトリを示さない場合、このメソッドは null を返します。」

したがって、私が推測するように、ディレクトリ以外の内容をリストしようとしている場合、File[] 配列はnull. したがって、使用しようとすると、コードが NPE で爆発します。

于 2013-07-03T20:03:57.557 に答える