我想讀取應用程序文件夾的大小。我也可以用系統應用程序做到這一點,但沒有問題,但「正常」的應用程序文件夾,它讓我感到困難我做了這種方式:獲取java.lang.NullPointerException讀取大小的應用程序文件夾
File apk = new File("/data/app");
if (apk.exists()){
float apksize=getFolderSize(apk)/(1024f*1024f);
apk.setText(Html.fromHtml(getResources().getString(R.string.apk)+ " " +"<b>" +String.format("%.2f", apksize)+ " " + "Mb" + "</b>"
));
} else {
apk.setText(devicefragment.this.getResources().getString(R.string.folderapknotfound));
}
然後方法文件夾的大小
public static long getFolderSize(File dir) {
long size = 0;
for (File file : dir.listFiles()) {
if (file.isFile()) {
// System.out.println(file.getName() + " " + file.length());
size += file.length();
} else
size += getFolderSize(file);
}
return size;
}
每隔文件夾我嘗試它工作得很好..這個沒了。該logcat的回報:
FATAL EXCEPTION: main
java.lang.NullPointerException
at com.myapp.deviceinfo.getFolderSize(devicefragment.java:316)
at com.myapp.deviceinfo.onCreateView(devicefragment.java:179)
...
其中線316:size += getFolderSize(file);
和線路179:float apksize=getFolderSize(apk)/(1024f*1024f);
我不知道爲什麼它崩潰誠實..沒有根需要進行此項操作。
編輯:
我想:
public static long getFolderSize(File dir) {
long size = 0;
for (File file : dir.listFiles()) {
if (file == null) {
continue;
}
if (file.isFile()) {
// System.out.println(file.getName() + " " + file.length());
size += file.length();
} else
size += getFolderSize(file);
}
return size;
}
但崩潰時命名爲file
File
對象反正
如果將'getFolderSize'更改爲* Myclass * .getFolderSize,會發生什麼? – Pphoenix
您也可以在您正在使用的IDE中的'File apk = new File(「/ data/app」);行處設置調試斷點。在這一步前進一步,看看哪些變量是空的。 :) – Pphoenix
沒事..崩潰。但對於其他文件夾的作品..即使對於「系統/應用程序」 –