黑马程序员技术交流社区

标题: 读取properties,同样的代码在java项目里没有问题,在java web.... [打印本页]

作者: tuanjie    时间: 2014-1-7 18:49
标题: 读取properties,同样的代码在java项目里没有问题,在java web....
本帖最后由 tuanjie 于 2014-1-7 18:51 编辑

读取properties,同样的代码在java项目里没有问题,在java web项目里就出问题:
其中Properties文件为role.properties,内容为:
超级管理员=1111
管理员=2222
教师=3333
学生=4444
在java项目里
role.properties的位置:
请看下面的prop1.gif图
测试代码:
  1. package com.cn;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.util.Properties;

  5. public class Test {
  6.         public static void main(String[] args) {
  7.                 Properties prop = new Properties();
  8.                 InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("role.properties");
  9.                 try {
  10.                         prop.load(in);
  11.                 } catch (IOException e) {
  12.                         e.printStackTrace();
  13.                 }
  14.                 String value = (String) prop.get("超级管理员");
  15.                 System.out.println(value);
  16.         }
  17. }
复制代码
测试结果是:1111
但是在java web项目里,role.properties的位置:
请看下面的prop2.gif图片
测试代码:

  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.util.Properties;

  4. public class Test {
  5.         public static void main(String[] args) {
  6.                 Properties prop = new Properties();
  7.                 InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("role.properties");
  8.                 try {
  9.                         prop.load(in);
  10.                 } catch (IOException e) {
  11.                         e.printStackTrace();
  12.                 }
  13.                 String value = (String) prop.get("超级管理员");
  14.                 System.out.println(value);
  15.         }

  16. }
复制代码
测试结果:
Exception in thread "main" java.lang.NullPointerException
    at java.util.Properties$LineReader.readLine(Properties.java:434)
    at java.util.Properties.load0(Properties.java:353)
    at java.util.Properties.load(Properties.java:341)
    at Test.main(Test.java:11)
应该是InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("role.properties");这句代码出问题了
奇怪的是,同样的代码在,properties文件的位置都没有变,为什么在java项目里可以正常运行,而在java web项目里面不可以运行呢?


prop1.gif (3.54 KB, 下载次数: 16)

prop1.gif

prop2.gif (6.67 KB, 下载次数: 16)

prop2.gif

作者: 浮出一个美    时间: 2014-1-7 19:46
也许是默认相对路径的问题吧,你试试用绝对路径?
如果是路径问题,servlet里有一个获取项目根路径的方法,好像是context.getRealPath()
作者: tuanjie    时间: 2014-1-7 21:41
浮出一个美 发表于 2014-1-7 19:46
也许是默认相对路径的问题吧,你试试用绝对路径?
如果是路径问题,servlet里有一个获取项目根路径的方法, ...

这里读取properties文件的类就是一个简单的java类,不是servlet,而且一般也不能把文件的路径写成绝对路径,主要的问题是在java项目里,可以加载到这个properties文件,但是在java web项目里好像就找不到这个文件,不知道为啥




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2