getResourceAsStream在读取属性文件时返回null

时间:2018-06-02 07:40:51

标签: java intellij-idea

我想从maven资源文件夹加载application.properties文件,但getResourceAsStream返回 null 。这是我的代码:

static {
    Properties props = new Properties(); 
    InputStream in = Configuration.class.getResourceAsStream("application.properties");
    props.load(in);
}

InputStream null Configuration类位于org.elasticsearch.utils个包,application.properties位于src/main/resources。怎么了?

5 个答案:

答案 0 :(得分:1)

从我所看到的,您的设置是正确的。将maven资源文件夹和java文件夹都放在“ main”下完全可以。 我对属性文件的文件名有疑问。我仍然不明白为什么,但是将名称从application.properties更改为whateverYouWant.properties后,它突然起作用了。

您是否在pom.xml中启用了对Maven资源的过滤?

    <build>

    <!--Allows access to maven resources-->
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>

这里是Alex Miller Retrieve version from maven pom.xml in code

的指南

这是访问Java代码中的属性的完整代码示例(我知道您已经发布了几乎所有内容,但以防万一有人偶然发现这篇文章)

    public String getVersionNumber() {
    String version = "";
    ClassLoader classLoader = getClass().getClassLoader();
    final Properties properties = new Properties();
    try {
        properties.load(classLoader.getResourceAsStream("main.properties"));
        version = properties.getProperty("application.version");
    } catch (IOException ioException) {
        log.log(Level.WARNING, "Version number could not be retrieved from maven resources.");
    } catch (NullPointerException nullPointerException) {
        log.log(Level.WARNING, "Cannot find .properties file to read version number");
    }
     return version;
}

答案 1 :(得分:0)

您尝试读取相对于Configuration类的类路径资源。

  • 如果要执行此操作,资源必须位于相同的相对路径上,即您的属性文件必须位于src/main/resources/org/elasticsearch/utils
  • 或者您可以使用绝对路径:/application.properties

答案 2 :(得分:0)

  1. 如果文件“application.properties”位于“src / main / resources”下,请使用完整路径(在类加载器的意义上):

    的getResourceAsStream( “/ application.properties”)

  2. 如果将文件移动到与类相同的包中,则可以使用相对路径:

    的getResourceAsStream( “application.properties”)

  3. 如果您将文件移至相同的其他包,请使用完整路径:

    的getResourceAsStream( “/我/包/名称/ application.properties”)

答案 3 :(得分:0)

这是我尝试过的工作:enter image description here

@ Jiri的回答也是正确的。

PS:"/config.properties"也适用于我的例子。但如果这是在ElasticTest类中,那么你应该只使用"config.properties"

答案 4 :(得分:-1)

您需要在rsource位置字符串的开头添加/或移动它以匹配包结构或使用类加载器而不是类。

通过类查找资源时,假设资源目录结构反映了您的类结构。

所以你的代码正在寻找资源 的src /主/资源/组织/弹性...