MP3播放器项目-编撰代码-4
MP3播放器项目---编写代码---4
1.代码结构图
3.LrcProcessor
2.HttpDownload
package hui.download;
import hui.utils.FileUtils;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class HttpDownloader {
private URL url = null;
/**
* 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件当中的内容
* 1.创建一个URL对象
* 2.通过URL对象,创建一个HttpURLConnection对象
* 3.得到InputStram
* 4.从InputStream当中读取数据
* @param urlStr
* @return
*/
public String download(String urlStr) {
StringBuffer sb = new StringBuffer();
String line = null;
BufferedReader buffer = null;
try {
// 创建一个URL对象
url = new URL(urlStr);
// 创建一个Http连接
HttpURLConnection urlConn = (HttpURLConnection) url
.openConnection();
// 使用IO流读取数据
buffer = new BufferedReader(new InputStreamReader(urlConn
.getInputStream()));
while ((line = buffer.readLine()) != null) {
sb.append(line);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
buffer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return sb.toString();
}
/**
* 该函数返回整形 -1:代表下载文件出错 0:代表下载文件成功 1:代表文件已经存在
*/
public int downFile(String urlStr, String path, String fileName) {
InputStream inputStream = null;
try {
FileUtils fileUtils = new FileUtils();
if (fileUtils.isFileExist(fileName,path)) {
return 1;
} else {
inputStream = getInputStreamFromUrl(urlStr);
File resultFile = fileUtils.write2SDFromInput(path,fileName, inputStream);
if (resultFile == null) {
return -1;
}
}
} catch (Exception e) {
e.printStackTrace();
return -1;
} finally {
try {
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return 0;
}
/**
* 根据URL得到输入流
*
* @param urlStr
* @return
* @throws MalformedURLException
* @throws IOException
*/
public InputStream getInputStreamFromUrl(String urlStr)
throws MalformedURLException, IOException {
url = new URL(urlStr);
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
InputStream inputStream = urlConn.getInputStream();
return inputStream;
}
}
package hui.lrc; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.regex.Matcher; import java.util.regex.Pattern; public class LrcProcessor { public ArrayList<Queue> process(InputStream inputStream) { //存放时间点数据 Queue<Long> timeMills = new LinkedList<Long>(); //存放时间点所对应的歌词 Queue<String> messages = new LinkedList<String>(); ArrayList<Queue> queues = new ArrayList<Queue>(); try { //创建BufferedReader对象 InputStreamReader inputReader = new InputStreamReader(inputStream,"UTF-8"); BufferedReader bufferedReader = new BufferedReader(inputReader); String temp = null; int i = 0; //创建一个正则表达式对象 Pattern p = Pattern.compile("\\[([^\\]]+)\\]"); String result = null; boolean b = true; while ((temp = bufferedReader.readLine()) != null) { i++; Matcher m = p.matcher(temp); if (m.find()) { if (result != null) { messages.add(result); } String timeStr = m.group(); Long timeMill = time2Long(timeStr.substring(1, timeStr .length() - 1)); if (b) { timeMills.offer(timeMill); } String msg = temp.substring(10); result = "" + msg + "\n"; } else { result = result + temp + "\n"; } } messages.add(result); queues.add(timeMills); queues.add(messages); } catch (Exception e) { e.printStackTrace(); } return queues; } /** * 将分钟,秒全部转换成毫秒 * @param timeStr * @return */ public Long time2Long(String timeStr) { String s[] = timeStr.split(":"); int min = Integer.parseInt(s[0]); String ss[] = s[1].split("\\."); int sec = Integer.parseInt(ss[0]); int mill = Integer.parseInt(ss[1]); return min * 60 * 1000 + sec * 1000 + mill * 10L; } }
4. Mp3Info
package hui.model; import java.io.Serializable; public class Mp3Info implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private String id; private String mp3Name; private String mp3Size; public String getId() { return id; } public void setId(String id) { this.id = id; } public Mp3Info() { super(); } @Override public String toString() { return "Mp3Info [id=" + id + ", lrcName=" + lrcName + ", lrcSize=" + lrcSize + ", mp3Name=" + mp3Name + ", mp3Size=" + mp3Size + "]"; } public String getMp3Name() { return mp3Name; } public Mp3Info(String id, String mp3Name, String mp3Size, String lrcName, String lrcSize) { super(); this.id = id; this.mp3Name = mp3Name; this.mp3Size = mp3Size; this.lrcName = lrcName; this.lrcSize = lrcSize; } public void setMp3Name(String mp3Name) { this.mp3Name = mp3Name; } public String getMp3Size() { return mp3Size; } public void setMp3Size(String mp3Size) { this.mp3Size = mp3Size; } public String getLrcName() { return lrcName; } public void setLrcName(String lrcName) { this.lrcName = lrcName; } public String getLrcSize() { return lrcSize; } public void setLrcSize(String lrcSize) { this.lrcSize = lrcSize; } private String lrcName; private String lrcSize; }
5.FileUtils
package hui.utils; import hui.model.Mp3Info; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import android.os.Environment; public class FileUtils { private String SDCardRoot; public FileUtils() { // 得到当前外部存储设备的目录 SDCardRoot = Environment.getExternalStorageDirectory() .getAbsolutePath() + File.separator; } /** * 在SD卡上创建文件 * * @throws IOException */ public File createFileInSDCard(String fileName, String dir) throws IOException { File file = new File(SDCardRoot + dir + File.separator + fileName); System.out.println("file---->" + file); file.createNewFile(); return file; } /** * 在SD卡上创建目录 * * @param dirName */ public File creatSDDir(String dir) { File dirFile = new File(SDCardRoot + dir + File.separator); System.out.println(dirFile.mkdirs()); return dirFile; } /** * 判断SD卡上的文件夹是否存在 */ public boolean isFileExist(String fileName, String path) { File file = new File(SDCardRoot + path + File.separator + fileName); return file.exists(); } /** * 将一个InputStream里面的数据写入到SD卡中 */ public File write2SDFromInput(String path, String fileName, InputStream input) { File file = null; OutputStream output = null; try { creatSDDir(path); file = createFileInSDCard(fileName, path); output = new FileOutputStream(file); byte buffer[] = new byte[4 * 1024]; int temp; while ((temp = input.read(buffer)) != -1) { output.write(buffer, 0, temp); } output.flush(); } catch (Exception e) { e.printStackTrace(); } finally { try { output.close(); } catch (Exception e) { e.printStackTrace(); } } return file; } /** * 读取目录中的Mp3文件的名字和大小 */ public List<Mp3Info> getMp3Files(String path) { List<Mp3Info> mp3Infos = new ArrayList<Mp3Info>(); File file = new File(SDCardRoot + File.separator + path); File[] files = file.listFiles(); FileUtils fileUtils = new FileUtils(); for (int i = 0; i < files.length; i++) { if (files[i].getName().endsWith("mp3")) { Mp3Info mp3Info = new Mp3Info(); mp3Info.setMp3Name(files[i].getName()); mp3Info.setMp3Size(files[i].length() + ""); String temp [] = mp3Info.getMp3Name().split("\\."); String eLrcName = temp[0] + ".lrc"; if(fileUtils.isFileExist(eLrcName, "/mp3")){ mp3Info.setLrcName(eLrcName); } mp3Infos.add(mp3Info); } } return mp3Infos; } }