获取java.lang.NullPointerException读取大小app文件夹

时间:2014-07-11 09:26:13

标签: java android apk

我想读取app文件夹的大小。我也可以使用系统应用程序没有问题,但“正常”的应用程序文件夹,它让我遇到问题。我这样做:

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;
            }

但无论如何崩溃

2 个答案:

答案 0 :(得分:0)

File的循环中,一个(或多个)名为file的{​​{1}}个对象为空。解决此问题的最简单方法是通过在循环内添加空检查来忽略null对象:

getFolderSize

答案 1 :(得分:0)

 for (File file : dir.listFiles()) {

dir.listFiles()可以返回null。因此,最好先确定并在使用前检查null