自从转投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方法获取文件路径的更多相关文章

  1. 【转载】使用Class.getResource和ClassLoader.getResource方法获取文件路径

    自从转投Java阵营后,一直发下Java程序的路径读取异常麻烦,因此查阅了比较多的版本内容,整合了一份自己的学习笔记.主要使用Class及通过ClassLoader来动态获取文件路径. 查阅链接如下: ...

  2. 关于获取资源文件,Class.getResource和ClassLoader.getResource的区别

    原文同步发表至个人博客[夜月归途] 原文链接:http://www.guitu18.com/se/java/2019-02-22/29.html 作者:夜月归途 出处:http://www.guitu ...

  3. Class.getResource和ClassLoader.getResource的区别分析

    原文:http://swiftlet.net/archives/868 在Java中获取资源的时候,经常用到Class.getResource和ClassLoader.getResource,本文给大 ...

  4. 关于Class.getResource和ClassLoader.getResource的路径问题

    Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题. Class.getResource(Stri ...

  5. 【转】关于Class.getResource和ClassLoader.getResource的路径问题

    Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题. Class.getResource(Stri ...

  6. (转)关于Class.getResource和ClassLoader.getResource的路径问题

    Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题. 1 Class.getResource(St ...

  7. 【JAVA】Class.getResource()与ClassLoader.getResource()的区别

    转载自:https://blog.csdn.net/qq_33591903/article/details/91444342 Class.getResource()与ClassLoader.getRe ...

  8. Class.getResource和ClassLoader.getResource的路径写法

    Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题. Class.getResource(Stri ...

  9. Android中获取文件路径的方法总结及对照

    最近在写文件存贮,Android中获取文件路径的方法比较多,所以自己也很混乱.找了好几篇博客,发现了以下的路径归纳,记录一下,以备不时之需 Environment.getDataDirectory() ...

随机推荐

  1. CentOS6.2下安装eclipse

    在eclipse官网下载eclipse的linux版本(此处省略下载过程),我下载的是eclipse-jee-indigo-SR2-linux-gtk.tar.gz,下面是安装过程:  1.sudo ...

  2. C++容器类的简介

    C++容器类的简介 一.原型与构造函数 Vector的原型可定义为 vector<T, allocator <T> > 其构造函数为 vector()             ...

  3. 【转】bt协议的详细分析

    转自:https://baoz.net/bt-protocol/ 一 BT系统的组成结构 1 普通的Web服务器:        例如Apache或IIS服务器 2 一个静态的种子文件:     即. ...

  4. Windows下配置PHP支持LDAP扩展方法(wampserver)

    在网上搜了好多文章都不行呢,大都是没有开启扩展的问题,可是我的是开启的. 终于看到一篇文章,因为我用的是wampserver.下面是文章原话: 然后你发现上面的提示依旧,因为这是网上大多能查到的资料的 ...

  5. JS字符处理

    JS取整 1.toFixed(num)(ps:num为保留小数点后几位) 自定义保留小数点后几位,进行四舍五入.严格来说,这个函数不属于取整,但是当num=0时,也就是取整了,所以一起放到这里,方便查 ...

  6. unity3d NGUI多场景共用界面制作

    1创建单独编辑UI的unity场景 UIScene.unity 用来做UI面界 ,创建Resources文件存放UI界面的prefab,代码里动态load资源仅仅能从Resources目录载入 2创建 ...

  7. el表达式跟ognl表达式的区别(转)

    EL表达式: >>单纯在jsp页面中出现,是在四个作用域中取值,page,request,session,application.>>如果在struts环境中,它除了有在上面的 ...

  8. 应聘.net开发工程师常见的面试题(一)(转载)

    1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成 ...

  9. C#_dropdownlist_2

    string deptId =Request.Form["depts"].Trim(); Html.DropDownList()赋默认值: 页面代码如下: <%        ...

  10. Conclusion

    Conclusion This concludes our brief look at building a simple, but fully functional, Zend Framework ...