无法从资源目录加载属性文件
我从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将查找项目根目录中的文件