今日、私はハードディスク上のファイルを見つけるための小さなJavaプログラムを作成しました。これは、Windowsに適切なファイルがないことと、楽しみのためだったことが理由の1つです。ディレクトリのすべての子を単純に繰り返し、ディレクトリの場合はすべての子を再帰的に繰り返します。しかし、それから私は持っていましたNullPointerException
。いくつかSystem.out.println()'s
と私はこれが、、、try-catch block
のようないくつかのディレクトリで起こったことを知りました。エクスプローラーのアドレスバーに「アクセスが拒否されました」と入力すると、Windows自体が表示します。探索すると、ロックされているように見えます。からのソースは私に言います:D:\System Volume Information
C:\Users\Public\Documents\My Videos
C:\ProgramData\Templates
java.io.File
public File[] listFiles() {
String[] ss = list();
if (ss == null) return null; //This line seems to cause the NPE
int n = ss.length;
File[] fs = new File[n];
for (int i = 0; i < n; i++) {
fs[i] = new File(ss[i], this);
}
return fs;
}
私の質問は、なぜ適切な発言、、、IOException
またはSecurityException
さえないのIDontCareWhatKindOfExceptionButPleaseNoNullPointerExceptionException
ですか?
私はただtry-catch
のためNPEs
に、またはチェックすることができることを知っていますnull
、しかし私はなぜ適切Exception
に投げられないのか本当に興味があります。
私はコードの美的価値のために嫌いtry/catch
でチェックしているので、いくつかのメソッドをエミュレートするnull
厄介で厄介なリフレクションコード(偽善的なブロックがたくさんある)を作成しました。。そして、私はいくつかのWindowsファイルを気にしないので、このコードを使用してそれらを単に無視し、私に空を与えます:try/catch
java.io.File
java.io.FileSystem
array
public static File[] listFiles(File mThis) {
String[] ss = list(mThis);
if (ss == null) {
//System.out.println("ss is null");
return new File[] {};
}
int n = ss.length;
File[] fs = new File[n];
for (int i = 0; i < n; i++) {
fs[i] = getNewFile(ss[i], mThis);
}
return fs;
}
編集:誤解を避けるために:私は使用しますtry/catch
、私は単にそれらを美的に好きではありません。
EDIT2:コマンドプロンプトよりもGUIを使用したいです。そして、私はWindowsSearchGUIが非常に嫌いです。使うのはほとんど苦痛です。