有時(shí)候洼冻,我們需要對(duì)指定類型文件設(shè)定不同樣式的icon,與文件擴(kuò)展名一一對(duì)應(yīng)惯裕,獲取擴(kuò)展名方法很笨温数,但是由于沒有相關(guān)Api,也只能采用笨方法
獲取文件擴(kuò)展名
/**
* 獲取文件格式名
*/
public static String getFormatName(String fileName) {
//去掉首尾的空格
fileName = fileName.trim();
String s[] = fileName.split("\\.");
if (s.length >= 2) {
return s[s.length - 1];
}
return "";
}
原理是蜻势,通過“.”來對(duì)文件名切分撑刺,取數(shù)組內(nèi)最后一個(gè),我們就認(rèn)為這個(gè)就是文件的擴(kuò)展名握玛,當(dāng)數(shù)組長度小于2時(shí)够傍,我們認(rèn)為它沒有擴(kuò)展名,當(dāng)未知文件處理挠铲,當(dāng)然還有其他的方法冕屯,比如subString
值得注意的是 “.” 在java中屬于關(guān)鍵字,需要轉(zhuǎn)義
好拂苹,我們拿到擴(kuò)展名后安聘,為其設(shè)置對(duì)應(yīng)的icon就好了,但是(有但是了)文件擴(kuò)展名不計(jì)其數(shù)瓢棒,我們不可能每種類型都對(duì)應(yīng)設(shè)置icon浴韭,首先美工就得瘋掉,那么該怎么辦呢音羞?
將格式分類區(qū)分
比如 jpg囱桨、jpeg、gif 等都是圖片嗅绰,統(tǒng)一規(guī)劃為 image 類型
為了加強(qiáng)代碼的可讀性舍肠,關(guān)鍵是要加強(qiáng)代碼的可擴(kuò)展性,這里我采用了枚舉來進(jìn)行分類區(qū)分窘面,枚舉類型如下(我只列出了項(xiàng)目中用到的格式翠语,自行補(bǔ)充并且替換iconId)在使用過程中,只需要在對(duì)應(yīng)類型下補(bǔ)充對(duì)應(yīng)的格式即可
FormatEnum 格式枚舉
/**
* Created by MrYan on 2018/9/10.
* 格式枚舉
*/
public enum FormatEnum {
//文件夾
FOLDER("folder", R.drawable.normal_dir),
//圖片格式
IMG("img", R.mipmap.file_icon_cad, "jpg", "jpeg", "gif", "png", "bmp", "tiff"),
//文本格式
TXT("txt", R.mipmap.file_icon_txt, "txt"),
//文檔格式
WORD("word", R.mipmap.file_icon_word, "docx", "dotx", "doc", "dot", "pagers"),
//電子表格
EXCEL("excel", R.mipmap.file_icon_excel, "xls", "xlsx", "xlt", "xltx"),
//ppt
PPT("ppt", R.mipmap.file_icon_ppt, "ppt", "pptx"),
//pdf
PDF("pdf", R.mipmap.file_icon_pdf, "pdf"),
//音頻格式
MP3("mp3", R.mipmap.file_icon_mp3, "mp3", "wav", "wma"),
//視頻格式
VIDEO("video", R.mipmap.file_icon_video, "avi", "flv", "mpg", "mpeg", "mp4", "3gp", "mov", "rmvb", "mkv"),
//網(wǎng)頁格式
HTML("html", R.mipmap.h5, "html"),
//cad
CAD("cad", R.mipmap.file_icon_cad, "dwg","dxf","dwt"),
//ps
PS("ps", R.mipmap.file_icon_psd, "psd", "pdd"),
//max
MAX3D("3DMax", R.mipmap.file_icon_max, "max"),
//壓縮包
ZIP("zip", R.mipmap.file_icon_zip, "zip", "jar", "rar", "7z"),
//未知格式
UNKNOWN("unknown", R.mipmap.file_icon_unknown);
private static final String TAG = "FormatEnum";
public String TYPE;
public int ICON;
public String[] FORMATS;
/**
* @param type 文件類型
* @param icon 對(duì)應(yīng)icon
* @param formats 包含格式
*/
FormatEnum(String type, int icon, String... formats) {
this.TYPE = type;
this.ICON = icon;
this.FORMATS = formats;
}
/**
* 通過文件類型獲取對(duì)應(yīng)枚舉
*
* @param extension 文件擴(kuò)展名
* @return 文件對(duì)應(yīng)的枚舉信息财边,如果沒有肌括,返回未知
*/
public static FormatEnum getFormat(String extension) {
for (FormatEnum format : FormatEnum.values()) {
for (String extend : format.FORMATS) {
if (extend.equalsIgnoreCase(extension)) {
return format;
}
}
}
return UNKNOWN;
}
}
然后,通過封裝的工具類調(diào)用它
FormatUtils
/**
* Created by MrYan on 2018/9/10.
* 格式工具類酣难,通過文件名獲取文件格式
*/
public class FormatUtils {
/**
* 獲取文件格式名
*/
public static String getFormatName(String fileName) {
//去掉首尾的空格
fileName = fileName.trim();
String s[] = fileName.split("\\.");
if (s.length > 2) {
return s[s.length - 1];
}
return "";
}
/**
* 獲取文件對(duì)應(yīng)icon
*/
public static int getFileIcon(String fileName) {
File file = new File(fileName);
if (file.isDirectory()) {
return FormatEnum.FOLDER.ICON;
}
//獲取擴(kuò)展名并且全部轉(zhuǎn)小寫
String extension = getFormatName(fileName).toLowerCase();
if (TextUtils.isEmpty(extension)) {
return FormatEnum.UNKNOWN.ICON;
}
FormatEnum format = FormatEnum.getFormat(extension);
return format.ICON;
}
/**
* 獲取文件對(duì)應(yīng)類型
*/
public static String getFileType(String fileName) {
//獲取擴(kuò)展名并且全部轉(zhuǎn)小寫
String extension = getFormatName(fileName).toLowerCase();
if (TextUtils.isEmpty(extension)) {
return FormatEnum.FOLDER.TYPE;
}
FormatEnum format = FormatEnum.getFormat(extension);
return format.TYPE;
}
/**
* 通過文件獲取icon
*/
public static int getFileIcon(File file) {
return getFileIcon(file.getName());
}
/**
* 通過文件獲取格式名
*/
public static String getForamtName(File file) {
return getFormatName(file.getName());
}
/**
* 直接設(shè)置icon
*
* @param iv 需要設(shè)置icon的View
* @param fileName 文件名
*/
public static void initIcon(ImageView iv, String fileName) {
//如果是圖片類型的文件谍夭,還需要直接展示圖片
if (getFileType(fileName).equalsIgnoreCase(FormatEnum.IMG.TYPE)) {
iv.setImageResource(FormatEnum.IMG.ICON);
ImageLoader.load(iv.getContext(), fileName, iv);
} else {
iv.setImageResource(getFileIcon(fileName));
}
}
}
如此,大功告成