我从Git存储库导入了一个项目,并在Eclipse中添加了Maven本质。在resources文件夹中,我添加了一个名为myconf.properties
的配置文件。现在,每当我尝试从我的Java代码中打开此文件时,我都会得到FileNotFoundException
。该文件也存在于maven编译项目后生成的target/classes
文件夹中。
谁能告诉我可能是什么问题?我尝试加载此文件的Java代码是:
props.load(new FileInputStream("myconf.properties"));
其中props
是Properties
个对象。
有人可以给我一些关于如何解决这个问题的提示吗?
答案 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()