How to display files on the SD card in a ListView?

前端 未结 6 2026
遥遥无期
遥遥无期 2020-12-03 06:24

I would like to create a button that when clicked will go to a class that displays all media files from an SD card using a ListView.

After selecting fro

相关标签:
6条回答
  • 2020-12-03 06:38
    public class FileActivity extends ListActivity {
    String str;
    ArrayList<String> al;
    ArrayAdapter<String> adapter;
    ListView lv;
    
    @SuppressLint("SdCardPath")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.file_view);
        Intent int1=getIntent();
        ArrayList<String> arr1=GetFiles(Environment.getExternalStorageDirectory().getPath());
        adapter= new ArrayAdapter<String>(getApplicationContext(),
                                android.R.layout.simple_expandable_list_item_1,arr1);
        lv = (ListView) findViewById(android.R.id.list);
        lv.setAdapter(adapter);
    }  
    private ArrayList<String> GetFiles(String path) {
        ArrayList<String> arr2=new ArrayList<String>();
        File file=new File(path);
        File[] allfiles=file.listFiles();
        if(allfiles.length==0) {
            return null;
        }
        else {
            for(int i=0;i<allfiles.length;i++) {
                arr2.add(allfiles[i].getName());
            }
        }
     return arr2; 
      }
    
    
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
        }
    
    0 讨论(0)
  • Updated function:: use this for new apis

    call function like this:

     searchForFileInExternalStorage("filename.ext");  
    

    @implementation

     public File searchForFileInExternalStorage(String filename) {
                File storage = Environment.getExternalStorageDirectory();
    
                return searchForFileInFolder(filename, storage);
            }
    
            public File searchForFileInFolder(String filename, File folder) {
                File[] children = folder.listFiles();
                File result;
    
                for (File child : children) {
                    if (child.isDirectory()) {
                        result = searchForFileInFolder(filename, child);
                        if (result != null) {
                            return result;
                        }
                    } else {
                        // replace equals by equalsIgnoreCase if you want to ignore the
                        // case of the file name
                        if (child.getName().equals(filename)) {
                            return child;
                        }
                    }
                }
    
                return null;
            }
    
    0 讨论(0)
  • 2020-12-03 06:43

    Add a Method GetFiles() to your program. Call it to get an ArrayList<> of all the files. You can then use it to populate your listview. You need to provide String argument DirectoryPath.

    The Function:

    public ArrayList<String> GetFiles(String DirectoryPath) {
        ArrayList<String> MyFiles = new ArrayList<String>();
        File f = new File(DirectoryPath);
    
        f.mkdirs();
        File[] files = f.listFiles();
        if (files.length == 0)
            return null;
        else {
            for (int i=0; i<files.length; i++) 
                MyFiles.add(files[i].getName());
        }
    
        return MyFiles;
    }
    

    Usage Example:

    @Override
    public void onCreate() {
    // Other Code
    
        ListView lv;
        ArrayList<String> FilesInFolder = GetFiles("/sdcard/somefolder");
        lv = (ListView)findViewById(R.id.filelist);
    
        lv.setAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, FilesInFolder));
    
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                // Clicking on items
             }
        });
    }
    

    Make sure that the External Storage is Readable: http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

    To Filter files based on Name/Extension: How to acces sdcard and return and array with files off a specific format?

    0 讨论(0)
  • 2020-12-03 06:43

    this is a correct solution for you! or i give you a link for this stuff!

    public class SongsManager {
    // SDCard Path
    //choose your path for me i choose sdcard
    final String MEDIA_PATH = new String("/sdcard/");
    private ArrayList<hashmap<string, string="">> songsList = new ArrayList<hashmap<string, string="">>();
    
    // Constructor
    public SongsManager(){
    
    }
    
    /**
     * Function to read all mp3 files from sdcard
     * and store the details in ArrayList
     * */
    public ArrayList<hashmap<string, string="">> getPlayList(){
        File home = new File(MEDIA_PATH);
    
        if (home.listFiles(new FileExtensionFilter()).length > 0) {
            for (File file : home.listFiles(new FileExtensionFilter())) {
                HashMap<string, string=""> song = new HashMap<string, string="">();
                song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4)));
                song.put("songPath", file.getPath());
    
                // Adding each song to SongList
                songsList.add(song);
            }
        }
        // return songs list array
        return songsList;
    }
    
    /**
     * Class to filter files which are having .mp3 extension
     * */
    //you can choose the filter for me i put .mp3
    class FileExtensionFilter implements FilenameFilter {
        public boolean accept(File dir, String name) {
            return (name.endsWith(".mp3") || name.endsWith(".MP3"));
        }
    }
     }
    
    0 讨论(0)
  • 2020-12-03 06:51
    File mfile=new File("/sdcard");
    File[] list=mfile.listFiles();
    
    System.out.println("list"+mfile.listFiles().length);
    for(int i=0;i<mfile.listFiles().length;i++)
    {
        if(list[i].isHidden())
        }
            System.out.println("hidden path files.."+list[i].getAbsolutePath());
        }
    }
    

    may this would help!!!

    0 讨论(0)
  • 2020-12-03 06:52

    First i strongly suggest you read some tutorials about android first so you get the basics. You have to implement the following to do this

    1. List all media files - How to list all media in Android?
    2. Start new Activity
    3. Android: Capturing the return of an activity
    0 讨论(0)
提交回复
热议问题