Search code examples
javaandroidandroid-listviewandroid-sdcard

Fetch only Folders name into ListView from SD Card


How to fetch only folders name from SD card into a ListView?

In one of my Church Application, I am allowing user to create an event (example: Phase-I Church - Evening Prayer_Part1), and then creating a folder with same name into

SD Card/Church Application/EventNameFolders

So now my target is to show all folders name from Church Application into ListView.


Solution

  • private ListView lv = (ListView) findViewById(R.id.your_list_view_id);
    
    List<String> your_array_list = new ArrayList<String>();
    String path = Environment.getExternalStorageDirectory().toString()+"/Church Application/";
    
    File f = new File(path);
    File[] files = f.listFiles();
    for (File inFile : files) {
        if (inFile.isDirectory()) {
            // in here, you can add directory names into an ArrayList and populate your ListView.
            your_array_list.add(inFile.getName());
        }
    }
    
     ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
                     this, 
                     android.R.layout.simple_list_item_1,
                     your_array_list );
    
             lv.setAdapter(arrayAdapter);
    

    Delete empty folders

    String path = Environment.getExternalStorageDirectory().toString()+"/Church Application/";
    
    File f = new File(path);
    File[] files = f.listFiles();
    for (File inFile : files) {
        if (inFile.isDirectory()) {
            // If this folder is empty, delete it.
            if (inFile.listFiles().length == 0) {
                inFile.delete();
            }
        }
    }
    

    Delete empty folders and Display only folders which are not empty

    private ListView lv = (ListView) findViewById(R.id.your_list_view_id);
    
    List<String> your_array_list = new ArrayList<String>();
    String path = Environment.getExternalStorageDirectory().toString()+"/Church Application/";
    
    File f = new File(path);
    File[] files = f.listFiles();
    for (File inFile : files) {
        if (inFile.isDirectory()) {
            // If this folder is empty, delete it.
            if (inFile.listFiles().length == 0) {
                inFile.delete();
             // If not, add to ArrayList 
            } else if (inFile.listFiles().length >= 1) {
                your_array_list.add(inFile.getName());
            } 
        }
    }
    
     ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
                     this, 
                     android.R.layout.simple_list_item_1,
                     your_array_list );
    
             lv.setAdapter(arrayAdapter);