在项目中经常遇到需要根据不同的条件判断输出结果的情况,通常想到的就是if/else if/else结构了,再进一步就会想到switch,特别是种类比较多的时候,但是switch有个特别不好的地方,就是不能用String,1.7以下的JDK,switch只能传int,char,和enum三种类型,根本不支持String。String转成int,char的可能性比较小——除非是数字、字符,所以还是想着将String弄成枚举比较靠谱。
这里以”文件下载功能模块中的根据文件类型返回不同的header类型“为例。
1、建一个枚举类,规定所有的文件类型,并提供方法获取类型:
public enum FileType{
//规定文件类型
DOC,DOCX,PDF,TXT,XLS,XLSX,PPT,PPTX,BMP,GIF,IEF,JPEG,
JPG,PNG,TIFF,TIF;
//提供方法用来获取文件类型
public static FileType getFileType(String fileType){
return valueOf(fileType.toUpperCase());
}
}
2、定义各种文件类型对应的content-type:
/**
* 该方法用来获取下载文件的文件类型
* @param fileName:文件名称,文件名称+.+后缀名
* */
public static String getContentType(String fileName){
String contentType="";
//校验
if(fileName==null || fileName.trim().length()<=0 || fileName.lastIndexOf(".")<=0) return "";
fileName = fileName.trim();
String extName = fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
//System.out.println("后缀为:"+extName);
switch(FileType.getFileType(extName)){
case DOC:contentType="application/msword";break;
case DOCX:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document";break;
case PDF:contentType="application/pdf";break;
case TXT:contentType="text/html";break;
case XLS:contentType="application/vnd.ms-excel";break;
case XLSX:contentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";break;
case PPT:contentType="application/vnd.ms-powerpoint";break;
case PPTX:contentType="application/vnd.openxmlformats-officedocument.presentationml.presentation";break;
case BMP:contentType="image/bmp";break;
case GIF:contentType="image/gif";break;
case IEF:contentType="image/ief";break;
case JPEG:contentType="image/jpeg";break;
case JPG:contentType="image/jpeg";break;
case PNG:contentType="image/png";break;
case TIFF:contentType="image/tiff";break;
case TIF:contentType="image/tif";break;
}
return contentType;
}
3、main方法进行测试:
public static void main(String[] args){
String fileName="1001.jpg";
String contentType = getContentType(fileName);
System.out.println("content-type:"+contentType);
}