Java 获取资源文件路径

1 问题描述

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

String str = "1.jpg";

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

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

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

2 解决办法

使用URL或者InputStream进行读取:

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

注意不能在路径前加/

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

这样读取出来是null

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

在这里插入图片描述

从JAR包运行的URL如下:

在这里插入图片描述

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

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

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

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

SpringBoot打成jar包后,获取不到读取resources目录下文件路径的问题

问题描述:Springboot没有打成jar之前,可以成功获取读取resources目录下xxx.json文件的路径。但是打成jar包后,接口调不通,原因是获取不到文件的路径。原因:在本地进行调试时,文件是真实存在于磁盘的某个目录。此时通过获取文件路径,是可以正常读取的,因为文件确实存在。而打包成jar以后,实际上文件是