获得不同操作系统的classes目录 如windows和linux的classes
因为项目需要读取classes下面的资源文件
为了方便在不同的操作系统中运行,如windows和linux下都能运行,这里的运行是指的都能在不更改源代码的情况下自动获取(或少量修改)
以下为工具类InitVar的代码实现
public class InitVar { public static String classesPath; //获得操作系统的名字 public static String OS = System.getProperty("os.name"); static{ //获得路径 classesPath = getClassesPath(); System.out.println(1111); } //以下两个方法为判断是否是linux或windows系统 private static boolean isLinux(){ return OS.toLowerCase().indexOf("linux")>=0; } private static boolean isWindows(){ return OS.toLowerCase().indexOf("windows")>=0; } //根据不同的结果返回不同的路径 private static String getClassesPath(){ System.out.println(2222); if(isLinux()){ return (Thread.currentThread().getContextClassLoader().getResource("").toString()).replace("%20", " ").replace("file:", ""); } if(isWindows()){ return (Thread.currentThread().getContextClassLoader().getResource("").toString()).substring(1).replace("%20", " ").replace("file:", ""); } return "请检查操作系统:不是windows或linux"; }
比如我们要加载classes目录下的 config_webinfo.properties文件,部分代码如下:
Properties prop = new Properties(); //获得配置文件 InputStream in; try { in = new BufferedInputStream(new FileInputStream(InitVar.classesPath+"config_webinfo.properties")); prop.load(in); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
如果我们的配置文件在resources文件夹下initweb文件夹内,那么处理就有点小改动
windows的代码片段是:
Properties prop = new Properties(); //获得配置文件 InputStream in; try { in = new BufferedInputStream(new FileInputStream(InitVar.classesPath+"resources\\initweb\\config_webinfo.properties")); prop.load(in); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }linux的代码片段是:
Properties prop = new Properties(); //获得配置文件 InputStream in; try { in = new BufferedInputStream(new FileInputStream(InitVar.classesPath+"resources/initweb/config_webinfo.properties")); prop.load(in); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }其实这个问题也好解决,在工具类InitVar增加两个方法,这个方法有一个参数,参数就是 InitVar.classesPath+"resources/initweb/config_webinfo.properties")
无需关心 加号后面的路径是windows的路径还是linux的路径
然后由这个方法自动将正斜杠或反斜杠进行转换
两个方法说明:
getClasses() ----> 相当于直接获得classespath
getClasses(String dir) ----> 参数表示配置文件在classes的其他目录,dir的写法可以是windows的反斜杠,也可以是linux的正斜杠
方法实现:
/* * 如果无参,就表示获取classes的根目录 * 此时获得到的是根目录,而不是配置文件的详细地址 */ public String getClasses(){ return classesPath; } /* * 如果有参,就表示配置文件不在classes的根目录,而是在二级或三级目录下 * 就需要稍微修改下 * 此时获取到的是配置文件的详细地址 * 我们无需关心dir究竟是windows的格式还是linux格式 */ public String getClasses(String dir){ if(isLinux()){ return classesPath+dir.replace("\\", "/"); } if(isWindows()){ return classesPath+dir.replace("/", "\\"); } return "请检查操作系统:不是windows或linux"; }然后您就可以根据自己的需求写了,比如您的配置文件在classes的根目录,您就可以通过两种方式获得classes的根目录
一种是直接获取静态变量classesPath,另外一种是调用方法getClasses()方法
如果您的配置文件在classes的其他目录,你就可以直接调用方法 getClasses(String dir)方法来获取配置文件的全路径
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情