我们可以通过枚举来定义获得web-inf 和 classpath的路径
先看下面我自己写的一个枚举
public enum EnumClassPath { /* * windows 获得classpath路径,后面加"resources\\initweb\\config_webinfo.properties" * windows 获得web-inf 路径 */ WinClassPath(Thread.currentThread().getContextClassLoader().getResource("").toString().replace('/', '\\').replace("file:", "").replace("%20", " ").substring(1).replace("%20", " ")), WinWebInf(Thread.currentThread().getContextClassLoader().getResource("").toString().replace('/', '\\').replace("file:", "").replace("classes\\", "").replace("%20", " ").substring(1).replace("%20", " ")), /* * linux 获得classpath路径,后面加"resources\\initweb\\config_webinfo.properties" * linux 获得web-inf 路径 */ LinuxClassPath(Thread.currentThread().getContextClassLoader().getResource("").toString().replace("file:", "").replace("%20", " ")), LinuxWebInf(Thread.currentThread().getContextClassLoader().getResource("").toString().replace("file:", "").replace("classes/", "").replace("%20", " ")); private String classpath; private EnumClassPath(String classpath){ this.classpath = classpath; } public String getClassPath() { return this.classpath; } }
这样,我们就可以很轻松的得到windows和linux下 web-inf和classpath的路径
下面的代码是上面代码的扩展
public enum EnumPath { spot(path_spot()), //对点的分割 win: /。 linux:\\。 config_webinfo(path_config_webinfo()), //获得配置文件 loginregister_log(path_loginregister_log()), //获得日志文件路径 Eamil(path_email()), //获得email的参数 webinf(path_webinf()), //获得web-inf地址 classpath(path_class()), //获得classpath地址 arhtmlpath(path_arhtml()), //获得html地址 updatepath(path_update()); //上传的图片地址,相对于web-inf的目录地址 private String path; private EnumPath(String path){ this.path = path; } private static String path_webinf() { if(System.getProperty("os.name").equals("win")){ return EnumClassPath.WinWebInf.getClassPath(); }else{ return EnumClassPath.LinuxWebInf.getClassPath(); } } private static String path_class() { if(System.getProperty("os.name").equals("win")){ return EnumClassPath.WinClassPath.getClassPath(); }else{ return EnumClassPath.LinuxClassPath.getClassPath(); } } private static String path_update() { if(System.getProperty("os.name").equals("win")){ //这里获得配置文件的路径,我这里先直接写 return "\\upload\\images\\"; }else{ return "/upload/images/"; } } private static String path_spot() { if(System.getProperty("os.name").equals("win")){ return "/."; }else{ return "\\."; } } private static String path_email() { if(System.getProperty("os.name").equals("win")){ return EnumClassPath.WinClassPath.getClassPath()+"email.properties"; }else{ return EnumClassPath.LinuxClassPath.getClassPath()+"email.properties"; } } private static String path_config_webinfo(){ if(System.getProperty("os.name").equals("win")){ return "WEB-INF\\classes\\initweb\\config_webinfo.properties"; }else{ return "WEB-INF/classes/initweb/config_webinfo.properties"; } } private static String path_arhtml(){ if(System.getProperty("os.name").equals("win")){ return "\\theme\\freemaker\\html\\article\\"; }else{ return "/theme/freemaker/html/article/"; } } private static String path_loginregister_log(){ if(System.getProperty("os.name").equals("win")){ return EnumClassPath.WinWebInf.getClassPath()+"loginregister\\log"; }else{ return EnumClassPath.LinuxWebInf.getClassPath()+"loginregister/log"; } } public String getClassPath() { return this.path; } }
个人认为主要的方法是 path_webinf()和path_class() 这两个方法,开发者将不必再关心当前操作系统是windows还是linux,将由系统自动判断,并且给出对应的地址
以上代码仅供参考,根据自己的实际情况增删即可。
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情