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

  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. 【JAVA】Class.getResource()与ClassLoader.getResource()的区别

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

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

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

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

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

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

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

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

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

  9. 【转载】ASP.NET中Server.MapPath方法获取网站根目录总结

    在ASP.NET网站应用程序中,可以通过Server.MapPath方法来获取跟服务器有关的目录信息,如获取网站的根目录.获取当前代码文件所在的目录路径.获取当前代码所在路径的上级路径等.Server ...

随机推荐

  1. graph embedding 使用方法

    无论是network embedding 还是graph embedding都是通过节点(node)和边的图,学出每个节点的embedding向量. 比较流行的算法有: Model Paper Not ...

  2. matplotlib显示黑白灰度图像颜色设置

    对于黑白灰度图像(矩阵) 1. 默认使用伪彩色拉升 2 cmap参数为 binary,可能导致颜色反转 3. cmap = gray,same color as origin, that is, wh ...

  3. Flutter -------- Drawer侧滑

    侧滑菜单在安卓App里面非常常见 抽屉通常与Scaffold.drawer属性一起使用.抽屉的子项通常是ListView,其第一个子项是DrawerHeader ,它显示有关当前用户的状态信息.其余的 ...

  4. Ionic4.x ion-refresher 下拉更新

    官方文档:https://ionicframework.com/docs/api/refresher <ion-header> <ion-toolbar> <ion-ti ...

  5. training 2

    Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.136 Average Precision (AP) @[ IoU ...

  6. pandas绘制矩阵散点图(scatter_matrix)的方法

    以 sklearn的iris样本为数据集 import matplotlib.pyplot as plt from scipy import sparse import numpy as np imp ...

  7. Day1作业2:多层菜单查询

    流程图: code: #!/usr/bin/env python # encoding: utf-8 # Auther:ccorz Mail:ccniubi@163.com Blog:http://w ...

  8. 【源码解析】Flink 是如何基于事件时间生成Timestamp和Watermark

    生成Timestamp和Watermark 的三个重载方法介绍可参见上一篇博客: Flink assignAscendingTimestamps 生成水印的三个重载方法 之前想研究下Flink是怎么处 ...

  9. 基于EasyDSS流媒体解决方案创建视频点播、短视频、视频资源库等视频播放系统

    随着前端技术的不断发展,视频点播早已不再是IE6时代的浏览器嵌入式Windows Media Player.也不是后来的flash media player需要的rtmp点播流,现在能够唯一满足全终端 ...

  10. git的使用学习(一)git的简介和安装

    Git简介 Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一). Git有什么特点?简单来说就是:高端大气上档次! 那什么是版本控制系统? 如果你用Microsoft Word写 ...