我寫遞歸方法來計算文件夾的大小:計算文件夾大小遞歸函數拋出的NullPointerException(爪哇)
private static long calcSize(File dir) {
if (dir.isFile() && dir.canRead()) {
return dir.length();
}
long size = 0;
if (dir.exists() && dir.isDirectory() && dir.canRead()) {
for (File file : dir.listFiles()) { //Here NPE
if (file.isFile() && dir.canRead())
size += file.length();
else if (file.isDirectory())
size += calcSize(file);
else
throw new Error("What is this: " + file);
}
}
return size;
}
加入額外的檢查,因爲用戶建議。仍然獲得NPE。在執行時,會發生
NPE:
calcSize(new File("D:/"))
上正常工作的另一個文件夾
。但在D:/和C:/我得到例外... 也許是因爲我有隱藏的系統目錄,我沒有訪問權限? 您的幫助,將不勝感激。
當某些引用爲空並且您仍然使用它時,您會得到空指針異常。在程序中查看2秒可以清楚地看出,只有值文件或listFiles()的重試值可以爲null。你應該檢查一下。 – Ingo 2011-05-10 18:56:38
你對機器有管理權限嗎?這可能是因爲你要求在沒有權限的目錄上列出文件。只是一個猜測。 – MeBigFatGuy 2011-05-10 19:00:39
MeBigFatGuy,也許你是對的,我有管理員權限,但仍有隱藏文件夾命名爲「系統卷信息」和「$ RECYCLE.BIN」我沒有權利。 – taypen 2011-05-10 19:19:19