碰到一个properties的资源文件,读取报空指针,什么原因?
我使用下面2中方式读取,都是空指针。
Properties pro
= new Properties();
pro.load(Demo.class.getResourceAsStream("/project/db.properties"));
pro.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("project/db.properties"));
Exception:
Exception in thread "main" java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Unknown Source)
at java.util.Properties.load0(Unknown Source)
at java.util.Properties.load(Unknown Source)
at project.HashMap.Demo.main(Demo.java:23)
PHP中文网2017-04-18 09:18:43
1、Demo.class.getClassLoader().getResourceAsStream()
,资源配置文件放在项目CLASSPATH路径下,加载时直接给文件名称;Demo.class.getClassLoader().getResourceAsStream()
,资源配置文件放在项目CLASSPATH路径下,加载时直接给文件名称;
2、或者使用java.util.ResourceBundle
java.util.ResourceBundle
类加载资源配置文件;🎜巴扎黑2017-04-18 09:18:43
Demo.class.getResourceAsStream("/project/db.properties")
Thread.currentThread().getContextClassLoader().getResourceAsStream("project/db.properties")
出现空指针异常是因为上面读取资源文件的语句返回的是空指针,也就是没有正确的定位到资源文件(路径错误)。
建议题主弄清楚Demo.class.getResourceAsStream()
和Thread.currentThread().getContextClassLoader().getResourceAsStream()
定位的路径。再次遇到这类问题就能迎刃而解了。Demo.class.getResourceAsStream()
和Thread.currentThread().getContextClassLoader().getResourceAsStream()
定位的路径。再次遇到这类问题就能迎刃而解了。
试一下输出以下三个语句,其中第三个语句跟Thread.currentThread().getContextClassLoader()
类似
Demo.class.getResource("").getPath()
Demo.class.getResource("/").getPath()
Demo.class.getClassLoader().getResource("").getPath();
第一个语句得到的是Demo类所在的绝对路径,第二、第三个语句得到的是项目CLASSPATH的绝对路径。题主你写的那两个读取资源的语句就是定位到以下路径 项目CLASSPATH/project/db.properties
Thread.currentThread().getContextClassLoader()
类似🎜
rrreee
🎜第一个语句得到的是Demo类所在的绝对路径,第二、第三个语句得到的是项目CLASSPATH的绝对路径。题主你写的那两个读取资源的语句就是定位到以下路径 项目CLASSPATH/project/db.properties
,看一下你的资源文件是不是在那个地方。🎜