【转载】使用Class.getResource和ClassLoader.getResource方法获取文件路径
自从转投Java阵营后,一直发下Java程序的路径读取异常麻烦,因此查阅了比较多的版本内容,整合了一份自己的学习笔记。主要使用Class及通过ClassLoader来动态获取文件路径。
查阅链接如下: Class及ClassLoader下获取Resource原理
Class及ClassLoader下获取Resource图文解析
首先,在IDE下面写的.java文件最终会被编译成一个.class的类。上面两种方法去读取文件都是基于.class的相对路径进行索引。

通过Class和ClassLoader两个类下的Resource方法获取路径主要区别是参数是否以"/"开头。
1. 通过Class.getResource方法获取文件路径
△getResource方法
(1) getResource方法必须输入参数,该方法没有提供空参数的方法重载,因此该方法必须输入参数。
(2) Class.getResource("")与Class.getResource("/") 的主要区别:空字符串下对应返回class文件所在包的位置,"/"参数返回的是class文件所在的根目录(所在包的上级目录)

2. 通过ClassLoader.getResource方法获取文件路径
ClassLoader.getResource方法同样带有一个String 类型的目录参数,但ClassLoader.getResource方法参数不支持参数为"/",因为该实例方法返回的就是类所在的根目录路径。输入带"/"开头的字符串,会返回null。

3. 示例以JDBCHelper类,分别获取1.xml,2.xml 及dbcfg.properties文件
文件分布如图所示: 

1 @Test
2 public void testFilePath() throws Exception
3 {
4 // 以class.getResource方法获取文件路径
5 System.out.println("------getFileURL by class.getResource------");
6 URL fileURL = JDBCHelper.class.getResource("1.xml");
7 System.out.println("1.xml Exit? " + isfileExit(fileURL));
8
9 fileURL = JDBCHelper.class.getResource("/2.xml");
10 System.out.println("2.xml Exit? " + isfileExit(fileURL));
11
12 fileURL = JDBCHelper.class.getResource("/config/dbcfg.properties");
13 System.out.println("properties Exit? " + isfileExit(fileURL));
14 System.out.println("------getFileURL by classLoader.getResource------");
15
16 fileURL = JDBCHelper.class.getClassLoader().getResource("com/scl/test/transcaction/1.xml");
17 System.out.println("1.xml Exit? " + isfileExit(fileURL));
18
19 fileURL = JDBCHelper.class.getClassLoader().getResource("2.xml");
20 System.out.println("2.xml Exit? " + isfileExit(fileURL));
21
22 fileURL = JDBCHelper.class.getClassLoader().getResource("config/dbcfg.properties");
23 System.out.println("properties Exit? " + isfileExit(fileURL));
24
25 }
26
27 public boolean isfileExit(URL fileURL) throws Exception
28 {
29 if (fileURL == null) { return false; }
30 String URLStr = URLDecoder.decode(fileURL.getFile(), "utf8");
31 File f = new File(URLStr);
32 if (f != null && f.exists())
33 {
34 f = null;
35 return true;
36 }
37 else
38 {
39 return false;
40 }
41
42 }

结果如下:

【转载】使用Class.getResource和ClassLoader.getResource方法获取文件路径的更多相关文章
- 使用Class.getResource和ClassLoader.getResource方法获取文件路径
自从转投Java阵营后,一直发下Java程序的路径读取异常麻烦,因此查阅了比较多的版本内容,整合了一份自己的学习笔记.主要使用Class及通过ClassLoader来动态获取文件路径. 查阅链接如下: ...
- 关于获取资源文件,Class.getResource和ClassLoader.getResource的区别
原文同步发表至个人博客[夜月归途] 原文链接:http://www.guitu18.com/se/java/2019-02-22/29.html 作者:夜月归途 出处:http://www.guitu ...
- Class.getResource和ClassLoader.getResource的区别分析
原文:http://swiftlet.net/archives/868 在Java中获取资源的时候,经常用到Class.getResource和ClassLoader.getResource,本文给大 ...
- 【JAVA】Class.getResource()与ClassLoader.getResource()的区别
转载自:https://blog.csdn.net/qq_33591903/article/details/91444342 Class.getResource()与ClassLoader.getRe ...
- 关于Class.getResource和ClassLoader.getResource的路径问题
Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题. Class.getResource(Stri ...
- 【转】关于Class.getResource和ClassLoader.getResource的路径问题
Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题. Class.getResource(Stri ...
- (转)关于Class.getResource和ClassLoader.getResource的路径问题
Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题. 1 Class.getResource(St ...
- Class.getResource和ClassLoader.getResource的路径写法
Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题. Class.getResource(Stri ...
- 【转载】ASP.NET中Server.MapPath方法获取网站根目录总结
在ASP.NET网站应用程序中,可以通过Server.MapPath方法来获取跟服务器有关的目录信息,如获取网站的根目录.获取当前代码文件所在的目录路径.获取当前代码所在路径的上级路径等.Server ...
随机推荐
- OpenJudge 计算概论1007:点评赛车
总时间限制: 1000ms 内存限制: 65536kB描述4名专家对4款赛车进行评论1)A说:2号赛车是最好的:2)B说:4号赛车是最好的:3)C说:3号赛车不是最好的:4)D说: B说错了.事实上只 ...
- 解决:WdatePicker新增状态下只能取比当前月份大的月份,编辑状态下只能取比当前input里指定月份的月份大的值
onclick="WdatePicker({ dateFmt: 'yyyy-MM', autoPickDate: true, minDate: this.value==''?'%y-#{%M ...
- for(auto i : v)遍历容器元素
c++11的新特性,v是一个可遍历的容器或流,比如vector类型,i就用来在遍历过程中获得容器里的每一个元素. for(auto i:v) for(auto &i:v) 代码1:#inclu ...
- Linux 下不得不说的那些快捷键
一 .终端里使用的那些快捷键(SERVER ADMIN必备) !! 执行上一条命令 !abc 执行以abc开头的最新的命令 !n 执行历史中第n个命令 Alt-> 历史最后一项 Alt-< ...
- MacBook Pro设置外接显示器竖屏显示 切换主显示器
切换主显示器设置 有一些使用 Mac 电脑的用户,比如笔记本用户,可能会由于屏幕太小想外接一个更大的显示器,也或是有多显示输出的需求.当 Mac 电脑上有了多个显示器以后,此时便会有主副显示区之分了. ...
- Chrome与chromedriver.exe的版本对应
Chrome与chromedriver.exe的版本对应 分类专栏: pyhton3.7+selenium3 转:https://blog.csdn.net/weixin_44545954/art ...
- Microsoft OA
Given a string S consisting of N lowercase letters, return the minimum number of letters that must b ...
- C++11使用make_shared的优势和劣势
Why Make_shared ? C++11 中引入了智能指针, 同时还有一个模板函数 std::make_shared 可以返回一个指定类型的 std::shared_ptr, 那与 std::s ...
- MongoDB数据表添加字段
db.tshare_a.insert( { "_id" : ObjectId("57172b0f657f8bbb34d70147"), "picUrl ...
- ES6深入浅出-7 新版的类(上集)-1.介绍原型
ES6新出的关键class BE受雇与网景开发了JS 当我们在写一个对象的时候,我们实际上内存的形式表示. obj等于一个空对象,可以直接toString.它为什么可以有toString window ...