列出所有文件夹中的所有文件在一个列表中
您好我正在寻找解决scheme,以列出根/ Android设备的所有文件。
假设根目录下有3个文件夹,但是我希望在一个列表中显示所有这些文件夹中的所有文件。
现在如果使用
File f=new File("/sdcard");
然后它会列出所有文件从SD卡文件夹只..如果我将使用
File f=new File("/download");
然后它会列出所有文件从下载文件夹只..如果我将使用
File f=new File("/");
然后它将只列出根目录文件…而不是/ sdcard或/下载的文件..
那么我应该遵循哪些步骤来列出带有filter的所有文件,以便仅列出根目录中所有文件夹的.csv文件。
谢谢..
尝试这个:
..... 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; }
或不带recursion的变体:
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; }
我修改了Vyacheslav的解决scheme,因为我只需要目录中的文件名。 也许这会对某人有帮助。
... 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; }
你可以使用下面的方法,
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; }