Java资源文件路径问题
这是昨天在 Java 的资源文件读取方面遇到的坑
先说结论
如果在项目中使用资源文件, 那么用Class :: getResourceAsStream(String) : InputStream方法来获取文件内容
再说原因
项目的资源文件, 与在IDE运行中相比, 导出成jar文件后, 所在的路径会发生变化
如果直接用Files :: newInputStream(Paths.get(String path))的方法来获取资源文件内容, 导出成jar文件后会因为路径不同而读取不到
如果使用Class :: getResource(String) : URL方法获取URL后再通过URL :: getPath() : String方法来获取路径, 一样行不通
范例
一个项目文件树
|- src
|- main
|- java
|- resources
|- database.properties <- the file want to read不合理代码
java
Properties props = new Properties();
try (InputStream in = Files.newInputStream(Paths.get("src/main/resources/database.properties")) {
props.load(in);
} catch (IOException e) {
logger.error(e.getMessage());
e.printStackTrace();
}更改后
java
Properties props = new Properties();
try (InputStream in = [ClassName].class.getResourceAsStream("/database.properties")) {
props.load(in);
} catch (IOException e) {
logger.error(e.getMessage());
e.printStackTrace();
}感谢
- Morgen_L
- sand