碰到一个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)
空指针异常,看看是不是23行有变量初始化为空或者没有初始化!
1、
Demo.class.getClassLoader().getResourceAsStream()
,资源配置文件放在项目CLASSPATH路径下,加载时直接给文件名称;2、或者使用
java.util.ResourceBundle
类加载资源配置文件;出现空指针异常是因为上面读取资源文件的语句返回的是空指针,也就是没有正确的定位到资源文件(路径错误)。
建议题主弄清楚
Demo.class.getResourceAsStream()
和Thread.currentThread().getContextClassLoader().getResourceAsStream()
定位的路径。再次遇到这类问题就能迎刃而解了。试一下输出以下三个语句,其中第三个语句跟
Thread.currentThread().getContextClassLoader()
类似第一个语句得到的是Demo类所在的绝对路径,第二、第三个语句得到的是项目CLASSPATH的绝对路径。题主你写的那两个读取资源的语句就是定位到以下路径
项目CLASSPATH/project/db.properties
,看一下你的资源文件是不是在那个地方。