求教大佬, Java 运行 jar 的时候,读取不到配置文件

2020-05-27 23:29:44 +08:00
 NoKey

当前项目打包成 jar 执行

然后我在 jar 同目录下放了一个 resource 目录,下面放了配置文件

使用

InputStream is = MyClass.class.getClassLoader().getResourceAsStream("resouce/myfile.properties")

这种方式,无法读取到文件

然后,我尝试了一下

String path =  MyClass.class.getClassLoader().getResource("").getPath();

获取不到路径

请大佬指点一下,谢谢。

3073 次点击
所在节点    程序员
9 条回复
putaozhenhaochi
2020-05-28 06:31:09 +08:00
你这是读取 jar 包外部配置了吧。

网上找的一段代码 ,你参考下
读取 jar 包内配置文件:

InputStream in = this.getClass().getClassLoader().getResourceAsStream("/configfilename.properties
读取 jar 包外配置文件:

String filePath = System.getProperty("user.dir") + "/conf/configfilename.properties";
InputStream in = new BufferedInputStream(new FileInputStream(filePath));
WhereverYouGo
2020-05-28 08:46:55 +08:00
如果是 Spring:
ClassPathResource resource = new ClassPathResource("resouce/myfile.json");
File file = resource.getFile();
xiaofan2
2020-05-28 09:03:45 +08:00
InputStream is = MyClass.class.getClassLoader().getResourceAsStream("resouce/myfile.properties")


这个改成
InputStream is = MyClass.class.getClassLoader().getResourceAsStream("/myfile.properties")
这样读取的是你 jar 包内 classes 目录下的 myfile.properties 文件
NoKey
2020-05-28 09:04:53 +08:00
@putaozhenhaochi 实际上目前就只能使用先读取文件,在得到流的方式。不过没搞明白,为啥直接运行 jar 得不到 classpath
BBCCBB
2020-05-28 09:28:04 +08:00
是 Class.getResourceAsStream 和 ClassLoader.getResourceAsStream 的区别, 你搜一下,看懂就能解决了 🐶
holddie
2020-05-28 09:34:37 +08:00
InputStream is = MyClass.class.getClassLoader().getResourceAsStream("resouce/myfile.properties")

引用你这句话,你的 resource 单词少个 r
RJH
2020-05-28 10:04:28 +08:00
Spring 有现成的类,以下代码就可以了
// 读取 resource 目录下的 test.txt 文件,打成 jar 包也可以读取到
Resource resource = new ClassPathResource("/test.txt");
InputStream resourceInputStream = resource.getInputStream();
egfegdfr
2020-05-28 10:28:22 +08:00
你这个读取的是 jar 外的配置文件。需要注意文件路径
falsemask
2020-05-29 20:59:34 +08:00
getResourceAsStream 只能获取编译后的路径下的文件吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/676150

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX