无法从资源目录加载属性文件

时间:2013-12-03 10:31:49

标签: java eclipse maven maven-3

我从Git存储库导入了一个项目,并在Eclipse中添加了Maven本质。在resources文件夹中,我添加了一个名为myconf.properties的配置文件。现在,每当我尝试从我的Java代码中打开此文件时,我都会得到FileNotFoundException。该文件也存在于maven编译项目后生成的target/classes文件夹中。

谁能告诉我可能是什么问题?我尝试加载此文件的Java代码是:

props.load(new FileInputStream("myconf.properties"));

其中propsProperties个对象。

有人可以给我一些关于如何解决这个问题的提示吗?

7 个答案:

答案 0 :(得分:112)

如果在编译后将文件放在目标/类下,则它已经位于构建路径的一部分目录中。目录src / main / resources是此类资源的Maven默认目录,它由Eclipse Maven插件(M2E)自动放置到构建路径。因此,无需移动属性文件。

另一个主题是,如何检索这些资源。构建路径中的资源自动位于正在运行的Java程序的类路径中。考虑到这一点,您应该始终使用类加载器加载此类资源。示例代码:

String resourceName = "myconf.properties"; // could also be a constant
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Properties props = new Properties();
try(InputStream resourceStream = loader.getResourceAsStream(resourceName)) {
    props.load(resourceStream);
}
// use props here ...

答案 1 :(得分:16)

我认为您需要将其置于src/main/resources下并按以下方式加载:

props.load(new FileInputStream("src/main/resources/myconf.properties"));

您尝试加载它的方式将首先检查项目的基本文件夹。如果它在target/classes中并且您想要从中加载它,请执行以下操作:

props.load(new FileInputStream("target/classes/myconf.properties"));

答案 2 :(得分:6)

如果它是简单的应用程序,那么也可以使用 getSystemResourceAsStream

$c = getRelativePath($a, $b) = "bin/bootstrap/css/bootstrap.min.css"

答案 3 :(得分:3)

右键单击Resources文件夹,然后选择Build Path > Add to Build Path

答案 4 :(得分:1)

我使用类似的东西来加载属性文件。

        final ResourceBundle bundle = ResourceBundle
                .getBundle("properties/errormessages");

        for (final Enumeration<String> keys = bundle.getKeys(); keys
                .hasMoreElements();) {
            final String key = keys.nextElement();
            final String value = bundle.getString(key);
            prop.put(key, value);
        }

答案 5 :(得分:0)

我相信从Eclipse运行,如果你使用“myconf.properties”作为相对路径,你的文件结构应该看起来像这样

ProjectRoot
         src
         bin
         myconf.properties

如果文件路径中没有指定其他目录,Eclipse将在项目根目录中查找该文件

答案 6 :(得分:0)

使用proxy_redirect off; proxy_set_header X-Forwarded-Proto $scheme;

示例代码:

ClassLoader.getSystemClassLoader()