搜索

首页  >  问答  >  正文

java - 读取.properties配置文件 空指针异常

碰到一个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)
PHPzPHPz2770 天前1087

全部回复(3)我来回复

  • 高洛峰

    高洛峰2017-04-18 09:18:43

    空指针异常,看看是不是23行有变量初始化为空或者没有初始化!

    回复
    0
  • PHP中文网

    PHP中文网2017-04-18 09:18:43

    1、Demo.class.getClassLoader().getResourceAsStream(),资源配置文件放在项目CLASSPATH路径下,加载时直接给文件名称;Demo.class.getClassLoader().getResourceAsStream(),资源配置文件放在项目CLASSPATH路径下,加载时直接给文件名称;

    2、或者使用java.util.ResourceBundle

    2、或者使用java.util.ResourceBundle类加载资源配置文件;🎜

    回复
    0
  • 巴扎黑

    巴扎黑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,看一下你的资源文件是不是在那个地方。🎜

    回复
    0
  • 取消回复