List all the files from all the folder in a single list

AndroidAndroid File

Android Problem Overview


Hi I am looking for the solution to list all the files from root/Android device.

Suppose there are 3 folder inside root directory,but I want to display all the files in all of these folder in a single list..

Now If am using

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

Then it will list all the files from the sdcard folder only..and If I will use

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

Then it will list all the files from download folder only ..and if I will use

       File f=new File("/");

Then it will list only root direcoty files...not the files inside /sdcard or /download..

So what steps shall I follow to list all the files with a filter to list only .csv files from all the folder inside root.

Thanks..

Android Solutions


Solution 1 - Android

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;
}

Solution 2 - Android

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;
}

Solution 3 - Android

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;
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionKanikaView Question on Stackoverflow
Solution 1 - AndroidVyacheslav ShylkinView Answer on Stackoverflow
Solution 2 - AndroidMicerView Answer on Stackoverflow
Solution 3 - AndroidLuciferView Answer on Stackoverflow