2012-10-25 34 views
1

我有一個問題,我知道如何檢查文件夾是否爲空,但是當我檢查循環中的文件夾是否爲空時,我總是收到錯誤,下面是我的代碼不起作用的示例。如何檢查循環中的文件夾是否爲空?

String sdcard = Environment.getExternalStorageDirectory().toString(); 
     File file = new File(sdcard); 
     File subFiles[] = file.listFiles(); 
     for(int i=0; i<subFiles.length; i++) { 
      File subFile = new File(sdcard +"/"+ subFiles[i].getName()); 
      if(subFile.isDirectory() && subFile.listFiles().length==0) { 

      } 
     } 

我總是在我的病情中得到錯誤。

+1

什麼是錯誤? – Egor

+0

NullPointerException – Adam

+1

什麼樣的錯誤和哪一行? – Hardik4560

回答

5

這裏有一個更好的版本的代碼,這是一個遞歸一個也意味着它將搜索上存儲的所有空文件夾。實際上,空檢查不是正確的事情,因爲documentation告訴null只會返回,如果file不是一個目錄。

public static void traverseEmptyFolders(File root) { 
     if (root.isFile()) { 
      throw new IllegalArgumentException("Argument should be a directory."); 
     } 
     for (File file : root.listFiles()) { 
      if (file.isDirectory()) { 
       File[] contents = file.listFiles(); 
       if (contents == null || contents.length == 0) { 
        // do something for an empty folder 
       } else { 
        traverseEmptyFolders(file); 
       } 
      } 
     } 
    } 

    public static void someOtherMethod() { 
     traverseEmptyFolders(Environment.getExternalStorageDirectory()); 
    } 

讓我知道這是否工作。

+0

我會試試看... – Adam

+0

這段代碼很棒,非常感謝。 – Adam

+0

@亞當,不客氣,很高興它解決了你的問題。 – Egor

0
String sdcard = Environment.getExternalStorageDirectory().toString(); 
    File file = new File(sdcard); 
    File subFiles[] = file.listFiles(); 
    for(int i=0; i<subFiles.length; i++) { 
     File subFile = new File(sdcard +"/"+ subFiles[i].getName()); 

File temp [] = subFiles.length;

 if(subFile.isDirectory() && (temp != null && temp.length == 0)) { 

     } 
    } 
+0

我無法使用此代碼,subFiles.length是int – Adam

+0

而且如果temp == null,則表示該文件夾不是目錄,而是文件。 – Adam

+0

請檢查編輯,如果在[i]的子文件是一個文件,它將返回一個文件而不是文件夾,所以不檢查它的長度,如果它是文件夾temp不爲空,然後進一步檢查長度。 – Hardik4560