Java 获取资源文件路径

1 问题描述

通过源码运行时,一般使用如下方式读取资源文件:

String str = "1.jpg";

资源文件与源码文件放在同一目录下,或者拥有同一父级目录:

String str = "a/b/1.jpg";

这样直接编译运行没有问题,但是打成JAR包后会读取不了,直接抛空指针异常。

2 解决办法

使用 URL 或者 InputStream 进行读取:

URL url = getClass().getClassLoader().getResource("a/b/1.jpg");
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("a/b/1.png");

注意不能在路径前加 /

URL url = getClass().getClassLoader().getResource("/a/b/1.jpg");
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("/a/b/1.png");

这样读取出来是 null

getClass().getClassLoader().getResource() 从源码运行的 URL 如下:

Java 获取资源文件路径

从JAR包运行的 URL 如下:

Java 获取资源文件路径

测试系统Win10,从源码运行的话有一个 file: 前缀,而从JAR包运行有一个 jar:file: 前缀。

前缀一般没有影响,一般都能直接通过 URL 获取文件,比如在 SwingJFrame 中设置图标:

mainFrame.setIconImage(new ImageIcon(getClass().getClassLoader().getResource("image/icon.png")).getImage());

如果只能通过 String 处理路径,需要把前缀 file: 或者 jar:file: 去掉,JAR的话可以结合 JarFile 类读取文件。

原文 

https://segmentfault.com/a/1190000023088805

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Java 获取资源文件路径

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址