找不到属性文件 - 如何将其定位为资源?

时间:2013-04-09 06:20:06

标签: java

我在位置有一个属性文件(来自netbeans项目资源管理器)

-MyTest
    +Web Pages
    +Source Packages
    -Test Packages
        -<default package>
            +Env.properties     <---- Here it is
        +com.mycomp.gts.test
        +com.mycomp.gts.logintest
        .....
        ....

现在,当我尝试使用代码

查找此文件时
InputStream propertiesInputStream = getClass().getResourceAsStream("Env.properties");
ENV.load(propertiesInputStream);

投掷java.lang.NullPointerException

4 个答案:

答案 0 :(得分:6)

您不能将该类用作加载资源的引用,因为资源路径不是相对于该类。改为使用类加载器:

InputStream propertiesInputStream = getClass().getClassLoader()
        .getResourceAsStream("Env.properties");
ENV.load(propertiesInputStream);

或者,您可以使用当前线程的上下文类加载器:

InputStream propertiesInputStream = Thread.currentThread()
    .getContextClassLoader().getResourceAsStream("Env.properties");
ENV.load(propertiesInputStream);

答案 1 :(得分:1)

String basePath = PropertiesUtil.class.getResource("/").getPath();
InputStream in = new FileInputStream(basePath + "Env.properties");
pros.load(in);
祝你好运:)

答案 2 :(得分:1)

尝试通过以下方式获得绝对路径:

String absolute = getClass().getProtectionDomain().getCodeSource().getLocation().toExternalForm();

您可以打印出字符串absolute并尝试将其子串到您的属性文件的路径。

答案 3 :(得分:0)

下面的代码读取存储在Maven项目的resources文件夹中的属性文件。

InputStream inputStream = YourClass.class.getResourceAsStream("/filename.properties");
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
    
Properties properties = new Properties();
properties.load(reader);
  
} catch (IOException ioException) {
    ioException.printStackTrace();
}