您的位置:首页 > 其它

maven项目中无法通过getClassLoader()获得所在包里面的文件流的解决方法

2015-01-03 00:02 323 查看
今天遇到了一个问题,在纯Java项目中

InputStream is = this.getClass().getClassLoader().getResourceAsStream("stopword.dic");
stopword.dic这个文件放在所在类的包中,能获取这个输入流。

可是在maven项目中,输入流却是为null的。这个问题百思不得其解。

不要getClassLoader()这个方法,就是在项目编译后的文件夹里面寻找文件,所以在maven项目中可以改为:

InputStream is = this.getClass().getResourceAsStream("/conf/stopword.dic");
注意前面要加斜杠“/”,这样还是提示为空!手动把文件放到编译后的项目中,运行,就不为空了,可是手动终究不好。

为了能自动加入到class环境中,在Spring配置文件中加入:

<context:property-placeholder location="classpath:/conf/stopword.dic"/>


不能自动加载!重新点击maven面板中的“install”。文件就会加载到class环境中了,再次运行,就不会出错了!

可是install的时候,会提示测试文件出错了。我的测试文件是mongodb和Spring的结合,以前测试都能插入数据,没什么问题,单独再测试,还是有问题。

配置文件读取不进去,提示${db.host}出错。最后把测试文件都注释了,再“install”,恢复测试文件,再次测试,又成功了!

看来这其中还是有点奥妙的。先前我有加载过一个mongodb2.properties文件,内容和mongodb.properties一模一样的,难道是有冲突,连直接删除都不能解决问题。

还要再“install”刷新才可以。又或者是配置文件加载的顺序问题,不过这个可能性比较低。看来只能把刚刚自己做的乱七八糟的步骤再重演一遍才能找到问题所在。当我复制多一个mongodb2.properties文件后,再重新测试一遍,居然还是测试通过!看来问题可能不是这个,留到明天再看看吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐