Java 获取资源文件路径

1 问题描述

经过源码运行时,通常使用以下方式读取资源文件:java

String str = "1.jpg";

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

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

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

2 解决办法

使用URL或者InputStream进行读取:url

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以下:
在这里插入图片描述
从JAR包运行的URL以下:
在这里插入图片描述
测试系统Win10,从源码运行的话有一个file:前缀,而从JAR包运行有一个jar:file:前缀。
前缀通常没有影响,通常都能直接经过URL获取文件,好比在SwingJFrame中设置图标:code

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

若是只能经过String处理路径,须要把前缀file:或者jar:file:去掉,JAR的话能够结合JarFile类读取文件。blog

相关文章
相关标签/搜索