2012-10-25 32 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