android写音乐播放器时遇到了一个问题,android或者java高手帮忙看看啊。
我写播放器,我要的是对SD卡进行全盘扫描,所以我要获取SD卡根目录,是这样获取的吗?代码如下:publicStringMuiscPath(){FileSDPath=nul...
我写播放器,我要的是对SD卡进行全盘扫描,所以我要获取SD卡根目录,是这样获取的吗?代码如下:public String MuiscPath(){
File SDPath = null;
boolean path = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
if(path){
SDPath = Environment.getExternalStorageDirectory();
}
return SDPath.toString();
}
然后又写了一个递归查找的方法,
public void getMuiscInfo(String path){
File dir = new File("/mnt/sdcard");
File file[] = dir.listFiles();
List list = new ArrayList();
for(File f : file){
if(f.isDirectory()){
// getMuiscInfo(f);
}else{
if(f.getName().endsWith(".mp3")){
list.add(f);
}
}
}
}
后来我发现这两个方法有冲突,因为我上面那个获取了SD卡的根目录,下面这个递归时,方法里面如果传入File类型的话 那我的字符串的路径就丢不进去,所以我就把参数改成String类型,调用这个方法时就传路径。结果在写这个方法时,发现要用File的对象才能调listFiles这个方法,于是我就加了个File dir = new File();据说/mnt/sdcard是SD卡的根目录,我就把这个丢到了File的构造参数里,总感觉不对劲。。。。。反正运行时就是在for循环遍历file的时候报错,我debug的时候看到获取根目录不是空的,然后dir里面的路径也不是空的,就是在dir.listFiles把值付给file[]的时候,file[]仍然是空的,并没有赋值成功。。。。
我等渣渣实在是不知道从何下手了,,,我不需要源代码,我只想有人指出错误。。。如果能加QQ的话更好,万分感激。。。。 展开
File SDPath = null;
boolean path = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
if(path){
SDPath = Environment.getExternalStorageDirectory();
}
return SDPath.toString();
}
然后又写了一个递归查找的方法,
public void getMuiscInfo(String path){
File dir = new File("/mnt/sdcard");
File file[] = dir.listFiles();
List list = new ArrayList();
for(File f : file){
if(f.isDirectory()){
// getMuiscInfo(f);
}else{
if(f.getName().endsWith(".mp3")){
list.add(f);
}
}
}
}
后来我发现这两个方法有冲突,因为我上面那个获取了SD卡的根目录,下面这个递归时,方法里面如果传入File类型的话 那我的字符串的路径就丢不进去,所以我就把参数改成String类型,调用这个方法时就传路径。结果在写这个方法时,发现要用File的对象才能调listFiles这个方法,于是我就加了个File dir = new File();据说/mnt/sdcard是SD卡的根目录,我就把这个丢到了File的构造参数里,总感觉不对劲。。。。。反正运行时就是在for循环遍历file的时候报错,我debug的时候看到获取根目录不是空的,然后dir里面的路径也不是空的,就是在dir.listFiles把值付给file[]的时候,file[]仍然是空的,并没有赋值成功。。。。
我等渣渣实在是不知道从何下手了,,,我不需要源代码,我只想有人指出错误。。。如果能加QQ的话更好,万分感激。。。。 展开
1个回答
展开全部
这个简单。你的递归程序有问题,其实你把file传进去更好,你获取SD卡根路径的写法也不正确,有的不是mnt开头,应该用这个方法获取Environment.getExternalStorageDirectory()。程序改成这样
List list = new ArrayList();
getMuiscInfo(path,list);
public void getMuiscInfo(String path,List list){
File dir = new File(path);
File file[] = dir.listFiles();
for(File f : file){
if(f.isDirectory()){
//getMuiscInfo(f.getabsolutepath(),list);
}else{
if(f.getName().endsWith(".mp3")){
list.add(f);
}
}
}
}
下面这个例子是安卓无忧里的sd卡浏览器,你可以参考一下,可以点击源码,查看源码,百度一下安卓无忧就行。如果您觉得好用就帮着宣传一下,也可以关注我的微博,下面是截图:
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询