使用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文件
文件分布如图所示: 
@Test
public void testFilePath() throws Exception
{
// 以class.getResource方法获取文件路径
System.out.println("------getFileURL by class.getResource------");
URL fileURL = JDBCHelper.class.getResource("1.xml");
System.out.println("1.xml Exit? " + isfileExit(fileURL)); fileURL = JDBCHelper.class.getResource("/2.xml");
System.out.println("2.xml Exit? " + isfileExit(fileURL)); fileURL = JDBCHelper.class.getResource("/config/dbcfg.properties");
System.out.println("properties Exit? " + isfileExit(fileURL));
System.out.println("------getFileURL by classLoader.getResource------"); fileURL = JDBCHelper.class.getClassLoader().getResource("com/scl/test/transcaction/1.xml");
System.out.println("1.xml Exit? " + isfileExit(fileURL)); fileURL = JDBCHelper.class.getClassLoader().getResource("2.xml");
System.out.println("2.xml Exit? " + isfileExit(fileURL)); fileURL = JDBCHelper.class.getClassLoader().getResource("config/dbcfg.properties");
System.out.println("properties Exit? " + isfileExit(fileURL)); } public boolean isfileExit(URL fileURL) throws Exception
{
if (fileURL == null) { return false; }
String URLStr = URLDecoder.decode(fileURL.getFile(), "utf8");
File f = new File(URLStr);
if (f != null && f.exists())
{
f = null;
return true;
}
else
{
return false;
} }
结果如下:

以上为getResource方法的总结,看来基础还是得加强
使用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,本文给大 ...
- 关于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 ...
- 【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 ...
- Android中获取文件路径的方法总结及对照
最近在写文件存贮,Android中获取文件路径的方法比较多,所以自己也很混乱.找了好几篇博客,发现了以下的路径归纳,记录一下,以备不时之需 Environment.getDataDirectory() ...
随机推荐
- eclipse项目导入到Android Studio Plugin with id 'android-library' not found
在主项目的build.gradle 中加入以下代码buildscript { repositories { mavenCentral() } dependencies { classpath 'com ...
- metasploit(MSF)终端命令大全
show exploits 列出metasploit框架中的所有渗透攻击模块. show payloads 列出metasploit框架中的所有攻击载荷. show auxiliary 列 ...
- Centos6 源代码部署MySQL5.6
mysql从5.5版本号開始,不再使用./configure编译,而是使用cmake编译器,详细的cmake编译參数能够參考mysql官网文档(※ 很重要) http://dev.mysql.com/ ...
- [Web] What Is JSONP?
JSONP—or JSON with padding—is a sneaky technique that web developers came up with to work around the ...
- C 循环链表
循环链表的定义:将单链表中最后一个数据元素的next指针指向第一个元素 在循环链表中可以定义一个“当前”指针,这个指针通常称为游标,可以通过这个游标来遍历链表中的所有元素. 1) 普通插入元素(和单链 ...
- android中的界面编程
主要是用View以及ViewGroup,同时ViewGroup又是View的子类,充当容器. 主要有两种方法控制view的行为: 1.在XML布局文件中通过XML属性进行控制 2.在Java代码中通过 ...
- jQuery选择器模糊匹配
<html> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8&quo ...
- python--while循环
1.最简单的while True循环 count = while True : : print('hello',count) break count += hello 2.利用while循环写一个猜年 ...
- JAVA_Gson_example
package cn.kjxy.GSON; import java.util.List; import cn.kjxy.JSON.HttpHelpers; import com.google.gson ...
- VS版本下载
tfs2012:BVGTF-T7MVR-TP46H-9Q97G-XBXRB http://www.microsoft.com/zh-cn/download/details.aspx?id=30658 ...