java获取resource下的文件路径
放了文件在 resources 目录下,只想拿到它的路径。
详情如下:
String path = xxx.class.getClassLoader().getResource("targetFile.txt").getPath();
java获取文件目录
| ── pom.xml
| ── src
│ |── main
│ │ |── java
│ │ │ |── com
│ │ │ │ |── alipay
│ │ │ │ │ |── ResourceTest.java
│ │ │ │ │ |── Resource.java
│ │ |── resources
│ │ │ |── conf
│ │ │ │ |── sysConf.json
│ │ │ |── request.xml
| ── local.iml
public class ResourceTest { public static void main(String[] args) { // 1、通过Class的getResource方法 String a1 = ResourceTest.class.getResource("/com/alipay/Resource.class").getPath(); String a2 = ResourceTest.class.getResource("Resource.class").getPath(); String a3 = ResourceTest.class.getResource("/request.xml").getPath(); String a4 = ResourceTest.class.getResource("../../request.xml").getPath(); String a5 = ResourceTest.class.getResource("/conf/sysConf.json").getPath(); String a6 = ResourceTest.class.getResource("../../conf/sysConf.json").getPath(); // 2、通过本类的ClassLoader的getResource方法 String b1 = ResourceTest.class.getClassLoader().getResource("com/alipay/Resource.class").getPath(); String b2 = ResourceTest.class.getClassLoader().getResource("request.xml").getPath(); String b3 = ResourceTest.class.getClassLoader().getResource("conf/sysConf.json").getPath(); // 3、通过ClassLoader的getSystemResource方法 String c1 = ClassLoader.getSystemClassLoader().getResource("com/alipay/Resource.class").getPath(); String c2 = ClassLoader.getSystemClassLoader().getResource("request.xml").getPath(); String c3 = ClassLoader.getSystemClassLoader().getResource("conf/sysConf.json").getPath(); // 4、通过ClassLoader的getSystemResource方法 String d1 = ClassLoader.getSystemResource("com/alipay/Resource.class").getPath(); String d2 = ClassLoader.getSystemResource("request.xml").getPath(); String d3 = ClassLoader.getSystemResource("conf/sysConf.json").getPath(); // 5、通过Thread方式 String e1 = Thread.currentThread().getContextClassLoader().getResource("com/alipay/Resource.class").getPath(); String e2 = Thread.currentThread().getContextClassLoader().getResource("request.xml").getPath(); String e3 = Thread.currentThread().getContextClassLoader().getResource("conf/sysConf.json").getPath(); } }
由于maven打包会把 src/main/java 和 src/main/resources 下的文件放到 target/classes 下,所以下面统一以根路径代表此目录,总结起来有以下几个规律:
Class.getResource()的资源获取如果以 / 开头,则从根路径开始搜索资源。
Class.getResource()的资源获取如果不以 / 开头,则从当前类所在的路径开始搜索资源。
ClassLoader.getResource()的资源获取不能以 / 开头,统一从根路径开始搜索资源。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南