这是我的maven结构:
project
---src
----main
----java
----App.java
----resources
----config.properties
以下是读取config.properties的代码:
private static final URL propFile = ClassLoader.getSystemResource("config.properties");
public App() throws IOException {
props.load(new FileInputStream(propFile.getFile()));
}
public static void main(String[] args) {
try {
App app = new App();
//Something interesting happens here
} catch (IOException e) {
e.printStackTrace();
}
}
当我运行java -jar MyApp-1.0.jar
时,我会收到FileNotFoundException
:
java.io.FileNotFoundException:file:/home/dragon/JavaProjects/MyApp/target/MyApp-1.0.jar!/config.properties(没有这样的文件或目录)
它出了什么问题?
答案 0 :(得分:1)
在java文件夹中,您应该放置App.java和资源目录。然后,您可以使用以下代码获取属性文件:
private static final URL propFile = getClass().getResourceAsStream("resources/config.properties");
public App() throws IOException {
props.load(new FileInputStream(propFile.getFile()));
}
所以你的项目结构如下:
project
---src
----main
----java
----App.java
----resources
----config.properties
答案 1 :(得分:1)
其中任何一个都可以正常工作:
Properties props = new Properties();
props.load(Thread.currentThread().getContextClassLoader()
.getResourceAsStream("config.properties"));
// OR
props.load(ClassLoader.getSystemResourceAsStream("config.properties");
在您的示例中,您尝试通过FileInputStream
来访问嵌入在JAR存档中的文件,而这些文件是您无法直接执行的。