Список всех файлов из всей папки в одном списке
Привет, я ищу решение для списка всех файлов с корневого/Android-устройства.
Предположим, что в корневом каталоге есть 3 папки, но я хочу отображать все файлы во всей этой папке в одном списке.
Теперь, если я использую
File f=new File("/sdcard");
Затем он будет перечислять все файлы только из папки sdcard.. и если я буду использовать
File f=new File("/download");
Затем он перечислит все файлы из папки загрузки.. и если я буду использовать
File f=new File("/");
Затем он будет перечислять только файлы корневых файлов rootcoty... не файлы внутри /sdcard или/download..
Итак, какие шаги я должен выполнить, чтобы перечислить все файлы с фильтром, чтобы перечислять только файлы .csv из всей папки внутри root.
Спасибо..
Ответы
Ответ 1
Попробуйте следующее:
.....
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;
}
Ответ 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;
}
Ответ 3
Вы можете использовать следующий метод,
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;
}