自从转投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方法的总结,看来基础还是得加强

最新文章

  1. jquery:validate的例子
  2. Allegro 中手动制作螺丝孔封装
  3. Android拓展系列(9)--Android视频录制screenrecord命令
  4. c++primerplus(第六版)编程题——第5章(循环和关系表达式)
  5. XMLHttpRequest state以及readystate的对应值
  6. EL表达式学习
  7. CSS3中设置字体的抗锯齿或光滑度的属性
  8. Rainbond v5.1.2发布,微服务架构应用便捷管理和交付
  9. Thinkpad L440 无线驱动突然无法使用,无法搜索到无线上网
  10. Dethe is my Finaunce金融
  11. laravel中使用的PDF扩展包——laravel-dompdf和laravel-snappy
  12. metaq架构原理
  13. 《You dont know JS》原生函数
  14. 重装Win7后找回Ubuntu启动项并在Ubuntu中修复引导
  15. IntelliJ IDEA部署tomcat时Edit Configuration无artifact选项
  16. Django基础学习一
  17. PostgreSQL与MySQL的区别收集(转)
  18. WEBPACK & BABEL 打包项目
  19. SQL多表连接查询(具体实例)
  20. nginx 反向代理做域名转发简单配置

热门文章

  1. 【转】解决HttpServletResponse输出的中文乱码问题
  2. MySQL5日期类型DATETIME和TIMESTAMP相关问题详解
  3. Indesign多媒体富交互插件【MagBuilder】与iOS app 【MagViewer】介绍
  4. BZOJ 1151 傲娇的人 排序
  5. Hive权限介绍
  6. android学习日记15--WebView(网络视图)
  7. Getting started: A skeleton application
  8. [转载]GDB十分钟教程
  9. matlab的legend用法
  10. synopsys license maker