博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 指定(后缀名)格式文件扫描
阅读量:5162 次
发布时间:2019-06-13

本文共 3114 字,大约阅读时间需要 10 分钟。

public class SongInfo {	private Integer id;         //id,主键	private String path;        //路径	private String fileName;    //文件名  不包含路径	private String artist;      //艺术家        public SongInfo(){	}getXXX() setXXX()...
以扫描/mnt/sdcard上面的.mp3,.wav为例,采用 广度优先遍历

package com.mp3.scan;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Queue;import android.util.Log;import com.mp3.entity.Lyric;import com.mp3.entity.SongInfo;/*音乐文件扫描*/public class MusicScan extends Thread{	private final String root = "/mnt/sdcard/";	//private final String root_extra1 = "/mnt/sdcard/extra_sd";	private Queue
directoryQueue; //遍历的文件队列 private List
songDirList; //歌曲目录列表 private List
songList; //歌曲列表 private List
lyricList; //歌词列表 private String lyricPath; private float leastSize = 200.0f; //音乐文件最低大小 单位KB private boolean isCompleted = false; public MusicScan(){ directoryQueue = new LinkedList
(); songDirList = new ArrayList
(); songList = new ArrayList
(); lyricList = new ArrayList
(); } /** * 广度优先遍历 * @param root 要遍历文件的根目录 * @return 返回搜索到的音乐文件信息列表 * @throws IOException * */ public List scan(String root) throws IOException{ if(songList == null){ songList = new ArrayList
(); }else { songList.clear(); } if(lyricList == null){ lyricList = new ArrayList
(); }else { lyricList.clear(); } //ReadMp3 read = new ReadMp3(); //解析歌曲文件对象 不需要解析TAG信息的话 就没必要这个对象 File file=new File(root); //根目录 //file = Environment.getExternalStorageDirectory(); directoryQueue.clear(); //清空队列 directoryQueue.offer(file); //入队列 while(!directoryQueue.isEmpty()){ file = directoryQueue.poll(); //出队列 boolean isSongDir = false; //标识变量 标识当前文件是否直接为含歌曲目录 File[] fileList=file.listFiles(); for (int i = 0; i < fileList.length; i++) { //System.out.println("当前文件 "+i+" 路径:" + fileList[i].getAbsolutePath());/* if(!fileList[i].exists()){ System.out.println(fileList[i].getName()+" 不存在!"); return null; }*/ if(fileList[i].isFile()){ //是文件 /*if(fileList[i].length()
 
if(si == null){							si = new SongInfo();							Log.v("MusicScan", "音乐文件TAG信息读取失败!");						}						si.setFileName(fileList[i].getName());  //文件名						si.setPath(fileList[i].getAbsolutePath());  //路径						songList.add(si);  //添加进行歌曲列表songList					}else if (isLryic(fileList[i])) {						//是歌词文件						System.out.println("是歌词文件" + fileList[i].getName());						Lyric lyric = new Lyric(fileList[i].getPath(),fileList[i].getName());						lyricList.add(lyric);					}else {						//非音乐文件						//System.out.println(fileList[i].getName()+"不是音乐文件");					}				}				else //fileList[i].isDirectory() == true				{					//是目录					//System.out.println(fileList[i].getName()+"是目录");					if(!fileList[i].canRead()){						//非可读文件						continue;					}					directoryQueue.offer(fileList[i]);				}			}		}		System.out.println("scan end");		return songList;	}
 
 
这样查找到的结果(歌曲文件、歌词文件后缀)列表分别被记录在songList,lyricList列表中

!fileList[i].canRead() 这一句很重要!否则可能出现不能遍历完所有文件!

转载于:https://www.cnblogs.com/fortunely/archive/2012/12/26/4472185.html

你可能感兴趣的文章
计算机网络基础知识
查看>>
C#里如何遍历枚举所有的项
查看>>
如何在键盘出现时滚动表格,以适应输入框的显示
查看>>
超级强大的鼠标手势工具
查看>>
常用Dockerfile举例
查看>>
jquery的ajax用法
查看>>
设计模式-策略模式(Strategy)
查看>>
django orm 数据查询详解
查看>>
JarvisOJ Basic 熟悉的声音
查看>>
C# list导出Excel(二)
查看>>
CAS 单点登录模块学习
查看>>
跟着辛星用PHP的反射机制来实现插件
查看>>
Android应用开发-网络编程①
查看>>
input中的name,value以及label中的for
查看>>
静态库制作-混编(工程是oc为基础)
查看>>
jQuery 显示加载更多
查看>>
代理模式
查看>>
Confluence 6 系统运行信息中的 JVM 内存使用情况
查看>>
Confluence 6 升级以后
查看>>
用JS实现版面拖拽效果
查看>>