2014-07-11 106 views
0

我想讀取應用程序文件夾的大小。我也可以用系統應用程序做到這一點,但沒有問題,但「正常」的應用程序文件夾,它讓我感到困難我做了這種方式:獲取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; 
      } 

但崩潰時命名爲fileFile對象反正

+0

如果將'getFolderSize'更改爲* Myclass * .getFolderSize,會發生什麼? – Pphoenix

+0

您也可以在您正在使用的IDE中的'File apk = new File(「/ data/app」);行處設置調試斷點。在這一步前進一步,看看哪些變量是空的。 :) – Pphoenix

+0

沒事..崩潰。但對於其他文件夾的作品..即使對於「系統/應用程序」 –

回答

0

一個(或多個)是在getFolderSize環空。解決這個問題的最簡單的方法是將內環路空校驗忽略那些空的對象:

for (File file : dir.listFiles()) { 
    if(file == null) { 
     continue; 
    } 
    ... 
} 
+0

你的意思是內循環?對於(檔案文件:dir.listFiles()){'? –

+0

是!:)更新問題以澄清 – Pphoenix

+0

我更新了你的建議任務..但仍然崩潰:( –

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

dir.listFiles()可以返回null。所以最好先確定並在使用前檢查null

+0

怎麼可能?文件夾存在!根是必需的...但爲什麼系統應用程序文件夾不是? –

+0

你有什麼建議嗎? –

+0

究竟是什麼?我沒有說根是必需的。只有我這麼認爲。請重新閱讀。但現在,我認爲更多的是肯定的,根源是必需的。 – greenapps