您的位置:首页 > 编程语言 > Java开发

Java class.getClassLoader().getResource("")获取资源路径

2017-10-20 15:08 756 查看
Java web项目打包部署时发现出现平时开发过程中没有出现的错误,查看日志发现是因为代码中

获取配置文件路径有误。

一、错误分析

项目中代码:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐