package me.wcy.music.utils;
import android.content.Context;
import android.os.Environment;
import android.text.TextUtils;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import me.wcy.music.R;
import me.wcy.music.application.AppCache;
import me.wcy.music.model.Music;
/**
* 文件工具类
* Created by wcy on 2016/1/3.
*/
public class FileUtils {
private static final String MP3 = ".mp3";
private static final String LRC = ".lrc";
private static String getAppDir() {
return Environment.getExternalStorageDirectory() + "/PonyMusic";
}
public static String getMusicDir() {
String dir = getAppDir() + "/Music/";
return mkdirs(dir);
}
public static String getLrcDir() {
String dir = getAppDir() + "/Lyric/";
return mkdirs(dir);
}
public static String getAlbumDir() {
String dir = getAppDir() + "/Album/";
return mkdirs(dir);
}
public static String getLogDir() {
String dir = getAppDir() + "/Log/";
return mkdirs(dir);
}
public static String getSplashDir(Context context) {
String dir = context.getFilesDir() + "/splash/";
return mkdirs(dir);
}
public static String getRelativeMusicDir() {
String dir = "PonyMusic/Music/";
return mkdirs(dir);
}
/**
* 获取歌词路径<br>
* 先从已下载文件夹中查找,如果不存在,则从歌曲文件所在文件夹查找。
*
* @return 如果存在返回路径,否则返回null
*/
public static String getLrcFilePath(Music music) {
if (music == null) {
return null;
}
String lrcFilePath = getLrcDir() + getLrcFileName(music.getArtist(), music.getTitle());
if (!exists(lrcFilePath)) {
lrcFilePath = music.getPath().replace(MP3, LRC);
if (!exists(lrcFilePath)) {
lrcFilePath = null;
}
}
return lrcFilePath;
}
/**
* 获取封面图片路径<br>
*
* @return 如果存在返回路径,否则返回null
*/
public static String getAlbumFilePath(Music music) {
if (music == null) {
return null;
}
String albumFilePath = music.getCoverPath();
if (TextUtils.isEmpty(albumFilePath) || !exists(albumFilePath)) {
albumFilePath = getAlbumDir() + getAlbumFileName(music.getArtist(), music.getTitle());
if (!exists(albumFilePath)) {
albumFilePath = null;
}
}
return albumFilePath;
}
private static String mkdirs(String dir) {
File file = new File(dir);
if (!file.exists()) {
file.mkdirs();
}
return dir;
}
private static boolean exists(String path) {
File file = new File(path);
return file.exists();
}
public static String getMp3FileName(String artist, String title) {
return getFileName(artist, title) + MP3;
}
public static String getLrcFileName(String artist, String title) {
return getFileName(artist, title) + LRC;
}
public static String getAlbumFileName(String artist, String title) {
return getFileName(artist, title);
}
public static String getFileName(String artist, String title) {
artist = stringFilter(artist);
title = stringFilter(title);
if (TextUtils.isEmpty(artist)) {
artist = AppCache.getContext().getString(R.string.unknown);
}
if (TextUtils.isEmpty(title)) {
title = AppCache.getContext().getString(R.string.unknown);
}
return artist + " - " + title;
}
public static String getArtistAndAlbum(String artist, String album) {
if (TextUtils.isEmpty(artist) && TextUtils.isEmpty(album)) {
return "";
} else if (!TextUtils.isEmpty(artist) && TextUtils.isEmpty(album)) {
return artist;
} else if (TextUtils.isEmpty(artist) && !TextUtils.isEmpty(album)) {
return album;
} else {
return artist + " - " + album;
}
}
/**
* 过滤特殊字符(\/:*?"<>|)
*/
private static String stringFilter(String str) {
if (str == null) {
return null;
}
String regEx = "[\\/:*?\"<>|]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
return m.replaceAll("").trim();
}
public static float b2mb(int b) {
String mb = String.format(Locale.getDefault(), "%.2f", (float) b / 1024 / 1024);
return Float.valueOf(mb);
}
public static void saveLrcFile(String path, String content) {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(path));
bw.write(content);
bw.flush();
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}