在java开发中关于class.getResourceAsStream(Stringname)与class.getClassLoader().getResourceAsStream(String name)的路径的问题

如有上述目录:

package de.qmjs.jdbc.jdbcUtils;

publicclasstest {

/**

* @param args

*/

publicstaticvoid main(String[] args) {

// TODO Auto-generated method stub

System.out.println(test.class.getResourceAsStream("DaoConfig.properties"));//第一种

System.out.println(test.class.getResourceAsStream("/de/qmjs/jdbc/dao/DaoConfig.properties"));//的二中

System.out.println(test.class.getClassLoader().getResourceAsStream("de/qmjs/jdbc/dao/DaoConfig.properties"));//第三种

}

}写上面一个测试类:

结果如下

第一种和第二种方式是采用Class对象去加载,第三种采用ClassLoader对象去加载资源文件,之所以Class对象也可以加载资源文件是因为Class类封装的ClassLoader的getResourceAsStream方法。从Class类中的源码中可以看出:

路径问题:

1. 第三种是最本质的做法,前两种也是基于第三种去实现的。JVM会使用BootstrapLoader去加载资源文件。所以路径还是这种相对于工程的根目录即"com/jdbc/dao/dao.properties"(不需要“/”)。

2. 第一种是采用的相对路径,资源文件相对于当前这个类即(DaoFactory类)的位置,这种方式Class对象做了一些处理。即resloveName(name)这个方法。最终name还是会转换成适合第三方式的name参数,但是第一种在测试时返回的确实空。

3. 第二种是采用绝对路径,绝对路径是相对于classpath根目录的路径(工程里src目录对应bin目录(存放.class文件的目录))。

所以:

建议使用第三种,避免硬编码。

在java开发中关于class.getResourceAsStream(String name)与 class.getClassLoader().getResourceAsStream(String相关推荐

  1. Java开发中文件读取方式总结

    JAVA开发中,免不了要读文件操作,读取文件,首先就需要获取文件的路径.路径分为绝对路径和相对路径. 在文件系统中,绝对路径都是以盘符开始的,例如C:abc1.txt. 什么是相对路径呢?相对路径就是 ...

  2. Java开发中更多常见的危险信号

    在< Java开发中的常见危险信号>一文中,我研究了一些不一定本身就是错误或不正确的做法,但它们可能表明存在更大的问题. 这些"红色标记"类似于"代码气味&q ...

  3. Java开发中的常见危险信号

    在开发,阅读,复审和维护成千上万行Java代码的几年中,我已经习惯于看到Java代码中的某些" 危险信号 ",这些信号通常(但可能并非总是)暗示着代码问题. 我不是在谈论总是错误的 ...

  4. java 线程 john_教你Java开发中多线程同步技巧

    教你Java开发中多线程同步技巧 在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题.在Java中内置了语言级的同步原语--synchronized,这也大大简化了Java ...

  5. Java开发中巧妙使用链表来实现模拟栈的入栈出栈操作

    2019独角兽企业重金招聘Python工程师标准>>> 在Java开发中经常会碰到需要你用Java链表来实现入栈出栈的模拟操作,下文就这个操作做了一个详细的描述. 栈:后进先出:最后 ...

  6. java路径Java开发中获得非Web项目的当前项目路径

    最近使用开发的过程中出现了一个小问题,顺便记录一下原因和方法--java路径 Java开发中指定路径搜索文件也是经常遇到的,比如遍历某个目录下的文件.须要取得项目的路径.调用调查主要有两种 1.利用S ...

  7. Java开发中常见的危险信号

    Dustin Marx是一位专业软件开发者,从业已经有17年的时间,他拥有电子工程学士学位,还是一位MBA.Dustin维护着一个博客,专门介绍软件开发的各个主题.近日,他撰文谈到了Java开发中常见 ...

  8. 【干货】Redis在Java开发中的基本使用和巧妙用法

    Redis是一款高性能的内存数据结构存储系统,能够支持多种数据结构类型,如字符串.哈希.列表.集合.有序集合等,也能够支持高级功能,如事务.发布/订阅.Lua脚本等,具有高可用性.高并发性和可扩展性的 ...

  9. day01--java基础编程:计算机基础知识 ,java语言概述,java开发环境搭建,eclipse概述,创建简单java项目,JDK JRE JVM的关系,java开发中的命名规范,编程风格

    1 Day01–Java开发环境+HelloWorld 1.1 计算机基础知识 资料下载网址:刘沛霞 18600949004 code.tarena.com.cn tarenacode code_20 ...

  10. 编写高质量代码:改善Java程序的151个建议 (第1章 Java开发中通用的方法和准则)

    第1章 Java开发中通用的方法和准则 The reasonable man adapts himself to the world;the unreasonable one persists in ...

最新文章

  1. R语言使用pROC包绘制ROC曲线、获取最优阈值(threshold)及最优阈值对应的置信区间
  2. 说说项目从0-1过程中的那点事儿
  3. 运用家居收纳储物空间 小空间变出大身材
  4. 获取汉字拼音的简便方法
  5. arm开发板放张图片动起来_ARM裸机不能正确显示图片的问题
  6. c++基础——程序流程结构之选择结构
  7. java 分布式sql引擎_分布式SQL查询引擎 Presto 性能调优的五大技巧
  8. 饿了么java_eleme-openapi-java-sdk
  9. 【原生JS组件】javascript 运动框架
  10. Q75:光照模型汇总:环境光、平行光光源、点光源、面积光源
  11. 学习VC与C++先后顺序
  12. 当生命科学遇上AI,会产生怎样1+1>2效果?
  13. Protecting Against DNN Model Stealing Attacks 论文阅读心得
  14. 固态硬盘usb测试软件,固态硬盘检测修复坏道三级OP设置软件HDAT2 5.3 ISO版
  15. 什么是根域名服务器?
  16. 数据库(一)——数据库的基本使用
  17. 邮件退信RCPT TO command问号
  18. 高数之 左右极限求法
  19. 计算机应用基础实验指导实验八,计算机应用基础第八章上机实验
  20. 【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名

热门文章

  1. python删除过期文件_python 删除过期文件的方法+源码
  2. mysql觸發器_mysql觸發器案例
  3. 416.分割等和子集
  4. 119.杨辉三角II
  5. python编程符号大全_2020 年最值得学习的 5 大 AI 编程语言
  6. 凸优化第三章凸函数 3.4拟凸函数
  7. 数学分析 导数的四则运算法则及多个函数的推广
  8. 32位程序如何在64位系统上运行_32位支持:使用 GCC 交叉编译 | Linux 中国
  9. 看大厂NLP的面试经验之后的一些思考总结
  10. oracle关闭和,ORACLE启动和关闭