Java class.getClassLoader().getResource("")获取资源路径
2017-10-20 15:08
756 查看
Java web项目打包部署时发现出现平时开发过程中没有出现的错误,查看日志发现是因为代码中
获取配置文件路径有误。
一、错误分析
项目中代码:
这种方法在开发时获取到的路径是
E:\hischarts\service\hischart\target\classes\mysql_db.properties
查看目录可知路径是正确的
而将war包部署到tomcat上获取到的路径是
E:\tomcat\apache-tomcat-8.5.15-windows-x64\apache-tomcat-8.5.15\webapps\hischart\WEB-INF\mysql_db.properties
查看war包解压后的目录可知在WEB-INF\后缺少classes\。
所以项目在开发中运行无误,在部署时运行失败。
二、查看原因:
查看资料项目中获取资源文件路径
方法应该有
1、xxx.class.getClassLoader().getResource(“”).getPath();
获取src资源文件编译后的路径(即classes路径)
2、xxx.class.getClassLoader().getResource(“文件”).getPath();
获取classes路径下“文件”的路径
3、xxx.class.getResource(“”).getPath(); 缺少类加载器,获取xxx类经编译后的xxx.class路径
4、this.getClass().getClassLoader().getResource(“”).getPath(); 等方法。
三、测试
测试来获取这几个地址:
结果:
四、结果分析
分析可知项目中getResource(“\”)也许是想已取巧方式获取资源路径,但此方式容易出错。
从上面结果可以看到在开发时,这种方法确实得到正确路径,但发布时使用getResource(“\”)
得到的资源地址是:
/E:/tomcat/apache-tomcat-8.5.15-windows-x64/apache-tomcat-8.5.15/webapps/hischart/WEB-INF/classes/
getParent()后地址为:
E:\tomcat\apache-tomcat-8.5.15-windows-x64\apache-tomcat-8.5.15\webapps\hischart\WEB-INF
可知此时再getparent()就不对了。
所以为了避免这种差别,我们可以直接用
xxx.class.getClassLoader().getResource(“文件名”).getPath();
也可以用
xxx.class.getClassLoader().getResourceAsStream(“文件名”);
直接获取InputStream
获取配置文件路径有误。
一、错误分析
项目中代码:
webRootPath = MySqlDbPoolConnection.class.getClassLoader().getResource("\\").getPath(); webRootPath = new File(webRootPath).getParent(); String profilepath = webRootPath + File.separator + fullFile;
这种方法在开发时获取到的路径是
E:\hischarts\service\hischart\target\classes\mysql_db.properties
查看目录可知路径是正确的
而将war包部署到tomcat上获取到的路径是
E:\tomcat\apache-tomcat-8.5.15-windows-x64\apache-tomcat-8.5.15\webapps\hischart\WEB-INF\mysql_db.properties
查看war包解压后的目录可知在WEB-INF\后缺少classes\。
所以项目在开发中运行无误,在部署时运行失败。
二、查看原因:
查看资料项目中获取资源文件路径
方法应该有
1、xxx.class.getClassLoader().getResource(“”).getPath();
获取src资源文件编译后的路径(即classes路径)
2、xxx.class.getClassLoader().getResource(“文件”).getPath();
获取classes路径下“文件”的路径
3、xxx.class.getResource(“”).getPath(); 缺少类加载器,获取xxx类经编译后的xxx.class路径
4、this.getClass().getClassLoader().getResource(“”).getPath(); 等方法。
三、测试
测试来获取这几个地址:
String str1 = DaoTest.class.getClassLoader().getResource("").getPath(); String str2 = DaoTest.class.getClassLoader().getResource("\\").getPath(); String str3 = DaoTest.class.getClassLoader().getResource("mysql_db.properties").getPath(); String str1_1 = new File(str1).getParent(); String str2_1 = new File(str2).getParent(); String str3_1 = new File(str3).getParent();
结果:
四、结果分析
分析可知项目中getResource(“\”)也许是想已取巧方式获取资源路径,但此方式容易出错。
从上面结果可以看到在开发时,这种方法确实得到正确路径,但发布时使用getResource(“\”)
得到的资源地址是:
/E:/tomcat/apache-tomcat-8.5.15-windows-x64/apache-tomcat-8.5.15/webapps/hischart/WEB-INF/classes/
getParent()后地址为:
E:\tomcat\apache-tomcat-8.5.15-windows-x64\apache-tomcat-8.5.15\webapps\hischart\WEB-INF
可知此时再getparent()就不对了。
所以为了避免这种差别,我们可以直接用
xxx.class.getClassLoader().getResource(“文件名”).getPath();
也可以用
xxx.class.getClassLoader().getResourceAsStream(“文件名”);
直接获取InputStream
相关文章推荐
- Java class.getClassLoader().getResource("")获取资源路径
- Java中获取classpath路径下的资源文件【ClassLoader.getSystemResource("")获取当前ClassPath的绝对URI路径,还可以以流的形式获取文件】
- Java class.getClassLoader().getResource("")获取资源路径
- Class.getResource和ClassLoader.getResource 获取资源文件路径
- Java在不同环境下获取当前路径的方法--this.getClass().getResource("")
- Java在不同环境下获取当前路径的方法--this.getClass().getResource("")
- 相对路径获取JAVA配置文件Class.getResourceAsStream() & ClassLoader的getResourceAsStream()
- 【JAVA】关于java中 类.class.getResource("/").getPath()获取路径有空格的问题
- Java在不同环境下获取当前路径的方法--this.getClass().getResource("")
- Class.getResourceAsStream()与ClassLoader.getResourceAsStream()获取资源时的路径说明
- String.valueOf(Thread.currentThread().getContextClassLoader().getResource("")) 获取项目的绝对路径(shiro项目中来的八)
- Java在不同环境下获取当前路径的方法--this.getClass().getResource("")
- Java中资源(resource)获取 Class.getResource() & ClassLoader.getResource()
- Java在不同环境下获取当前路径的方法--this.getClass().getResource("")
- Java在不同环境下获取当前路径的方法--this.getClass().getResource("")
- JAVA中路径问题总结Class.getResourceAsStream() & ClassLoader的getR...
- java 路径、className.class.getResourceAsStream()、ClassLoader.getSystemResourceAsStream() 、FileInputStre
- java 路径、className.class.getResourceAsStream()、ClassLoader.getSystemResourceAsStream() 、FileInputStream
- java 路径、className.class.getResourceAsStream()、ClassLoader.getSystemResourceAsStream() 、FileInputStream
- Class和ClassLoader.getResource获取资源