如何在JSF应用程序中加载属性文件?

时间:2015-10-31 13:34:18

标签: jsf jsf-2.2 properties-file

我尝试在我正在处理的properties应用程序中加载JSF文件,但我无法设法引用该文件。

package com.nivis.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class PropHandler {

    String result = "";
    InputStream inputStream;

    public void loadProp() {

        try {

            inputStream = this.getClass().getResourceAsStream("prop.properties");

            if (inputStream == null) {
                System.err.println("===== Did not load =====");
            } else {
                System.err.println("===== Loaded =====");
            }

        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            try {
                inputStream.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        PropHandler ph = new PropHandler();
        ph.loadProp();
    }
}

该文件位于同一个软件包中,在我搜索此内容时找到的不同示例中,该文件应该可以使用。我也尝试将文件放在应用程序的每个可能的位置,并尽我所知引用它,但它不起作用。

enter image description here

(只有我测试过以放置文件的部分文件夹)

我做错了什么?

最理想的是,我希望将其放在我用于msg.properties文件的同一文件夹中。

2 个答案:

答案 0 :(得分:2)

正如this answer所述,com/nivis/prop.properties 应该是引用资源文件夹中嵌套文件的正确方法。
但是因为您未使用ClassLoader classloader = Thread.currentThread().getContextClassLoader();找到Classloader ,您必须使用绝对路径,以" /&#34开头;结果为/com/nivis/prop.properties

答案 1 :(得分:0)

try something like this

ClassLoader classloader = Thread.currentThread().getContextClassLoader();
InputStream is = classloader.getResourceAsStream("prop.properties");