List all the files from all the folder in a single list
Try this:
..... 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;}
or variant without 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;}
I've modified Vyacheslav's solution because I needed only file names inside the directory. Maybe it'll be helpfull for someone.
...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;}
You can use following method,
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;}