私はこの問題に対処するために私が持っていたいくつかの幸運を共有すると思いました。私はJDK 1.6.0_23を使用しているので、NIO2を利用することはできません。私はWindows 7/x64上でビルドして稼働していますので、他の環境ではマイレージが異なる場合があります。残念ながら、ここで他の解決策は、(おそらくジャンクション!=シンボリックリンク....のために)ジャンクションをトラバースしようとしたときにNullPointerExceptionsが発生するのを避けるために私にとってはうまくいきませんでした。私はJDKのバージョンに制約されていませんが、私はもう少し長く問題に取り掛かることにしました。
シンボリックリンクで使用された場合、または「システムボリューム情報」ディレクトリに遭遇した場合、NullPointerExceptionを引き起こすこのコードがありました。
if (traverseItem.f().isDirectory) {
for (File item : traverseItem.f().listFiles()) {
ので、それはおそらくディレクトリですが、それにLISTFILES()を呼び出すことはNPEが発生する(注、traverseItem.f()タイプのjava.io.Fileのオブジェクトを返します)。何をすべきか?私はlist()メソッドを信じて、同じ振る舞いをするかどうか疑問に思いました。私が発見したのは以下の通りです:
空のフォルダを記述するファイルの呼び出しリスト()は、長さゼロのString []配列を返します。しかし、そうでない場合(LISTFILESからクラッシュ接合を記述したファイルのリストを())を呼び出すと、nullを返します
私はLISTFILES()
String[] contents = traverseItem.f().list();
if (contents != null) { //Non-traversible if null, possibly junction or ???
を呼び出す前に、次のテストを追加することでNullPointerExceptionsがを避けることができましたそれは徹底的に接続、シンボリックリンク、ハードリンクのすべてのケースをテストするために残って、私はそれを、ショートカットを言いたいと敢えて、これはいくつかの助けになるかもしれません。
http://stackoverflow.com/questions/2175673/java-check-symbolic-link-file-existenceに関連する – Gray
Java 1.7:[java.nio.Files.isSymbolicLink(Path)](http:// docs 。//javas/7/docs/api/java/nio/file/Files.html#isSymbolicLink%28java.nio.file.Path%29) - もっと自分自身のために注意してください。 –