2012-03-02 129 views
43

您好我正在寻找解决方案来列出根/ Android设备中的所有文件。列出所有文件夹中的所有文件在一个列表中

假设有根目录里三层文件夹,但我想在所有的在一个单一的列表,这些文件夹中显示所有文件..

现在如果我使用

 File f=new File("/sdcard"); 

那么它会从SD卡文件夹列表中的所有文件only..and如果我将使用

 File f=new File("/download"); 

然后,它会列出从下载文件夹中的所有文件只..和我是否会用

 File f=new File("/"); 

然后将只列出根direcoty文件...不是内部/ SD卡或/下载文件..

那么,什么步骤,我跟着列出与过滤器仅列出所有文件.csv文件来自根目录中的所有文件夹。

谢谢..

回答

111

试试这个:

..... 
List<File> files = getListFiles(new File("YOUR ROOT")); 
.... 
private List<File> getListFiles(File parentDir) { 
    ArrayList<File> inFiles = new ArrayList<File>(); 
    File[] files = parentDir.listFiles(); 
    for (File file : files) { 
     if (file.isDirectory()) { 
      inFiles.addAll(getListFiles(file)); 
     } else { 
      if(file.getName().endsWith(".csv")){ 
       inFiles.add(file); 
      } 
     } 
    } 
    return inFiles; 
} 

或变体不递归:

private List<File> getListFiles2(File parentDir) { 
    List<File> inFiles = new ArrayList<>(); 
    Queue<File> files = new LinkedList<>(); 
    files.addAll(Arrays.asList(parentDir.listFiles())); 
    while (!files.isEmpty()) { 
     File file = files.remove(); 
     if (file.isDirectory()) { 
      files.addAll(Arrays.asList(file.listFiles())); 
     } else if (file.getName().endsWith(".csv")) { 
      inFiles.add(file); 
     } 
    } 
    return inFiles; 
} 
+0

嗨,谢谢很多:) – Kanika 2012-03-03 09:01:09

+1

嗨Vyacheslav Shilkin,你的代码为我工作,但输出是延迟几秒后(2- 3秒)。你能提出一些建议让它更快一点吗? – 2013-05-24 07:31:41

+0

嘿非常感谢你 – 2013-09-25 16:10:06

1

您可以使用下面的方法,

private int readLogList(String filePath) 
{ 
    File directory = Environment.getExternalStorageDirectory(); 

    File folder = new File(directory + ConstantCodes.FILE_SEPARATOR + filePath); 

    if (!folder.exists()) 
    { 
     return 0; 
    } 

    return folder.list().length; 
} 
+1

但是这里仍然需要传递filePath?我不能访问所有目录中的所有文件 – Kanika 2012-03-02 09:44:37

+0

那么你需要递归地调用这个方法 – Android 2012-03-02 09:46:31

2

我修改维亚切斯拉夫的解决方案因为我只需要目录内的文件名。也许这会对某人有帮助。

... 
List<String> files = getList(new File("YOUR ROOT")); 
... 
private List<String> getList(File parentDir, String pathToParentDir) { 

    ArrayList<String> inFiles = new ArrayList<String>(); 
    String[] fileNames = parentDir.list(); 

    for (String fileName : fileNames) { 
     if (fileName.toLowerCase().endsWith(".txt") || fileName.toLowerCase().endsWith(".rtf") || fileName.toLowerCase().endsWith(".txd")) { 
      inFiles.add(pathToParentDir + fileName); 
     } else { 
      File file = new File(parentDir.getPath() + "/" + fileName); 
      if (file.isDirectory()) { 
       inFiles.addAll(getList(file, pathToParentDir + fileName + "/")); 
      } 
     } 
    } 

    return inFiles; 
} 
+1

对不起,但你的修改没有任何改进。首先你用.txt例子添加目录,而我真的不知道parentDir.getParent()无法修复哪个pathToParentDir。最后,不鼓励使用“/”,而是使用File.separator。 – Michel 2014-04-19 06:17:50

相关问题