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

我从Git仓库导入了一个项目,并在Eclipse中添加了Maven特性。 在资源文件夹中,我添加了一个名为myconf.properties的configuration文件。 现在,每当我尝试从我的Java代码打开这个文件,我得到FileNotFoundException 。 该文件也出现在maven编译项目之后生成的target/classes文件夹中。

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

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

其中props是一个Properties对象。

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

如果文件在编译之后放置在target / classes下,那么它已经位于构buildpath的一部分的目录中。 目录src / main / resources是这些资源的Maven默认目录,它被Eclipse Maven插件(M2E)自动放置到构buildpath中。 所以,没有必要移动你的属性文件。

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

 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 ... 

我认为你需要把它放在src/main/resources下面,如下所示:

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

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

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

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

我使用这样的东西来加载属性文件。

  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); } 

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

 try (InputStream inputStream = ClassLoader.getSystemResourceAsStream("config.properties")).. 

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

 ProjectRoot src bin myconf.properties 

如果文件path中没有指定其他目录,Eclipse将查找项目根目录中的文件