InputStream is = DBUtil.class.getClassLoader().getResourceAsStream("utils/config.properties");
如上图,显示了类与配置文件的存储位置。利用DBUtil类动态获的获得文件config.properties的位置,从而获得此文件的资源,可以采用以上代码,但是每部分的含义理解起来却有些困难,接下来对每部分进行详细说明,从而可以彻底理解。
一、DBUtil
DBUtil是类名,此类在定义时,需要获得config.properties文件中的参数值。因此存储时,通常把配置文件与类文件放在一起。便于动态获取。
InputStream is=new FileInputStream("D:/apache-tomcat-8.5.38/wtpwebapps/MVC/WEB-INF/classes/utils/config.properties");
利用以上代码其实也可以获得config.properties文件资源,但是必须把文件的存放位置准确地写出来,需要有多层文件夹,书写起来十分麻烦;而且开发者不可能准确记住对应文件夹名称,容易发生书写错误;另外,这种方式是我们俗称的“硬编码”,若项目移动位置,那么必须修改源代码,十分不便。如果采用类利用相关方法动态获取地址,就没有这些不便了。
二、class这里的class一个特殊的对象,java世界里一切皆对象,从某种意义上说,java里有两种对象:class对象和实例对象,实例对象是由class对象产生的。每一个类都有一个Class对象,每当编译一个新类就产生一个Class对象,所有的引用数据类型的类名、基本数据类型都有一个class对象,可以通过.class方式获取。 每个类加载后,都是通过JAVA虚拟机及类加载器自动生成class对象,并且把它载入内存,再利用该类的class对象来创建该类的所有实例化对象。Class对象可以理解为就是java类编译后生成的.class文件,它包含了与类有关的信息。 那么为什么是通过DBUtil类的class对象去定位找到properties文件而不是DBUtil.java文件找呢?文件不是和DBUtil.java文件存储在一起吗?因为java是编译型语言,真正运行的是DBUtil.class,不会拿个DBUtil.java文件就使用,,Java 想获得文件,你得从最终生成的.class文件为着手点,不要以.java文件的路径为出发点。
如果想要获得Class对象,通常由三种方法,下面分别列举出来:
总结
以上就是今天要讲的内容,本文仅仅介绍了前面两部分,将在[后一篇](https://blog.csdn.net/m0_51286391/article/details/109852125)中解析剩下两个方法。
本文地址:https://blog.csdn.net/m0_51286391/article/details/109837896