Android下的实现对本地指定和筛选文件的目录显示
程序员文章站
2022-07-14 18:53:58
...
条件:
1.我们需要得到一些路径,某个文件目录下的。比如:"/kgmusic/download/' 下的。我打开手机看的是这个路径。
2. 我们是为了筛选出.MP3 文件。然后显示。不希望出现说显示所有的文件
3.确定用怎么样的方式用ListActivity 还是SimpleAdapter 通过list显示在自己自定的xml文件中
实现第一个条件:
1. 这是有点傻哈, 我是这样的。我们在手机中看到路经不一定android 所对应的路经。怎么看呢。可以通过adb shell 去显示。比如说:"/kgmusic/download/' 。它在Android下的路径其实是"/sdcard/kgmusic/download/"
// 存放着音乐文件的路径 private final String MUSIC_PATH = "/sdcard/kgmusic/download/";
2.我们去实现FilenameFilter这个接口,取到filename结尾是.MP3的文件
// 用来去筛选出对应的.mp3文件 class musicfilter implements FilenameFilter { /* * accept方法的两个参数的意义: dir:文件夹对像,也就是你原来调用list方法的File文件夹对像 name:当前判断的文件名, * 这个文件名就是文件夹下面的文件 * 返回:这个文件名是否符合条件,当为true时,list和listFiles方法会把这个文件加入到返回的数组里,false时则不会加入 */ public boolean accept(File dir, String filename) { // TODO Auto-generated method stub return (filename.endsWith(".mp3")); } }
// 将这个文件显示在Listview 下 。我这里用的SimpleAdapter适配器去实现的。这里要两个xml.SetAlarm.this是这个本地Activity
private void ListSongsName() { //首先是要得到music文件的路径 File file=new File(MUSIC_PATH); List<Map<String,Object>> list= new ArrayList<Map<String,Object>>(); //将所有的文件加入到一个list文件中 if(file.list(new musicfilter()).length>0){ for (File file1 : file.listFiles(new musicfilter())){ Map<String,Object> map=new HashMap<String, Object>(); map.put("filename",new EFfile(file1).getFile().getName()); list.add(map); } } SimpleAdapter sa= new SimpleAdapter(SetAlarm.this, list, R.layout.musiclist, new String[]{"filename"}, new int[]{R.id.MusicItem} ); listview.setAdapter(sa); }
贴下对应的mustlist.xml 文件吧
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/MusicItem" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>