我很高兴阅读和写入预设文件,并可以手动填充列表视图,但我希望有一个我错过的官方(或不)文件浏览器,或其他更优雅的解决方案来呈现用户使用目录列表,让他们选择一个文件。
答案 0 :(得分:18)
final String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
File[] files = Environment.getExternalStorageDirectory().listFiles();
} else {
...
}
答案 1 :(得分:17)
File fileList = new File("/sdcard");
if (fileList != null){
File[] filenames = fileList.listFiles();
for (File tmpf : filenames){
//Do something with the files
}
}
}
您可以尝试另一种方法
答案 2 :(得分:0)
代码:列出所有音乐文件或文件文件或视频文件,图片,在android中从外部存储到listView。
ArrayList<String> filenames;
ArrayAdapter<String> adapter;
// onCreate方法
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);
// getMusic()是从外部存储中获取和过滤所有音乐文件的方法
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);
}
}
}
只需将(.mp3,.wav)等字符串值更改为 .your_file_extension