在项目中经常遇到需要根据不同的条件判断输出结果的情况,通常想到的就是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); }