Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从sd卡(目录)上获取文件列表的好方法是什么?_Android - Fatal编程技术网

Android 从sd卡(目录)上获取文件列表的好方法是什么?

Android 从sd卡(目录)上获取文件列表的好方法是什么?,android,Android,我很乐意读写预设的文件,可以手动填充listview,但我希望有一个我错过的官方(或非官方)文件浏览器,或其他更优雅的解决方案,为用户提供目录列表,让他们选择一个文件 final String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { File[] files = Environment.getExternalStorageDirectory().li

我很乐意读写预设的文件,可以手动填充listview,但我希望有一个我错过的官方(或非官方)文件浏览器,或其他更优雅的解决方案,为用户提供目录列表,让他们选择一个文件

final String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
File[] files = Environment.getExternalStorageDirectory().listFiles();
} else {
...
}

您可以尝试另一种方法

代码:在android中将所有音乐文件或文档文件或视频文件、图像从外部存储列到listView

ArrayList<String> filenames;
ArrayAdapter<String> adapter;
ArrayList文件名;
阵列适配器;
//onCreate方法

songlist=findviewbyd(R.id.songlist)//歌曲列表是ListView小部件
filenames=newarraylist();
getMusic();//音乐文件功能
adapter=new ArrayAdapter(YourActivity.this、android.R.layout.simple\u list\u item\u 1、文件名);
songlist.setAdapter(适配器);
//getMusic()是从外部存储器获取和过滤所有音乐文件的方法

private void getMusic(){
文件路径=Environment.getExternalStorageDirectory();
字符串文件名;
队列文件=新建LinkedList();//链接列表
files.addAll(Arrays.asList(path.listFiles());//在链接列表中添加path的所有文件
而(!files.isEmpty()){
File=files.remove();
if(file.isDirectory()){
files.addAll(Arrays.asList(file.listFiles());
}
else if(file.getName().endsWith(“.mp3”){//筛选文件
filename=file.getName();//根据其扩展名
filenames.add(filename);//文件名是字符串ListArray
}
else if(file.getName().endsWith(“.ogg”)){
filename=file.getName();
添加(文件名);
}
else if(file.getName().endsWith(“.amr”)){
filename=file.getName();
添加(文件名);
}
else if(file.getName().endsWith(“.wav”)){
filename=file.getName();
添加(文件名);
}
else if(file.getName().endsWith(“.wma”)){
filename=file.getName();
添加(文件名);
}
else if(file.getName().endsWith(“.flac”)){
filename=file.getName();
添加(文件名);
}
}
}
只需将字符串值(如(.mp3、.wav)更改为 .您的文件扩展名


看起来它可以工作,但最好使用Environment.getExternalStorageDirectory()覆盖文件fileList=new文件(“/sdcard”);以防它被称为“SD卡”以外的东西!我需要的命令是:path.list();path.listFiles();和对话框。设置项(路径列表);-甚至不需要listview:)在代码中发现一个输入错误,否则它将无法编译:Files[]Files=…->File[]files=…还有一个方法
.list()
,它只返回文件名,因此不必获取所有文件对象。
ArrayList<String> filenames;
ArrayAdapter<String> adapter;
songlist =  findViewById(R.id.songlist);  //songlist is ListView widget
    filenames = new ArrayList<>();
    getMusic();         // music files funtions
    adapter=new ArrayAdapter<>(YourActivity.this, android.R.layout.simple_list_item_1, filenames);
    songlist.setAdapter(adapter);
private void  getMusic() {

    File path = Environment.getExternalStorageDirectory();
    String filename ;
    Queue<File> files = new LinkedList<>();         //Linklist

    files.addAll(Arrays.asList(path.listFiles()));  //adding all files of path in linklist

    while (!files.isEmpty()){
        File file = files.remove();
        if (file.isDirectory()){
            files.addAll(Arrays.asList(file.listFiles()));


        }
        else if (file.getName().endsWith(".mp3")){   //filtering files
            filename = file.getName();               // according to their extension
            filenames.add(filename);              //filenames is string ListArray

        }
        else if (file.getName().endsWith(".ogg")){
            filename = file.getName();
            filenames.add(filename);
        }
        else if (file.getName().endsWith(".amr")){
            filename = file.getName();
            filenames.add(filename);
        }
        else if (file.getName().endsWith(".wav")){
            filename = file.getName();
            filenames.add(filename);
        }
        else if (file.getName().endsWith(".wma")){
            filename = file.getName();
            filenames.add(filename);
        }
        else if (file.getName().endsWith(".flac")){
            filename = file.getName();
            filenames.add(filename);
        }


    }


}