このコードを使用して、特定のディレクトリで特定のファイル パターンを再帰的に検索しています。
if (file.isDirectory()) {
System.out.println("Searching directory ... "
+ file.getAbsoluteFile());
if (file.canRead()) {
System.out.println("Can read...");
if (file.listFiles() == null) {
System.out.println("yes it is null");
}
for (File temp : file.listFiles()) { // Problemetic line
if (temp.isDirectory()) {
search(temp);
} else {
// code to find a file
}
}
}
上記のコードは次のように出力します(例外も発生します):
Searching directory ... C:\swsetup\SP46840\Lang\zh-TW
Can read...
Searching directory ... C:\System Volume Information
Can read...
yes it is null
例外は次のとおりです。
Exception in thread "main" java.lang.NullPointerException
at Demo.search(Demo.java:61)
at Demo.search(Demo.java:63)
(file.listFiles())
私のコードでは、「システムボリューム情報」などのシステムディレクトリからファイルのリストを取得しようとしているため、行は : を指しています。それはシステムディレクトリだからだと思うので、私が気付いていない問題が発生している可能性があります。
私の質問は:
- このシナリオをどのように処理すれば
NullPointerException
、foreach
ループが継続するようになりますか? - または、最初に例外を回避する方法(システムディレクトリなどであるかどうかを確認するなど)のほうがよいでしょうか?
誰でもこれで私を案内してもらえますか? 注: これは Windows XP で発生しています (数か月前に Windows 7 でテストしましたが、そこでは問題が発生していなかったと思います)。