欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

servlet--利用getResourceAsStream获取properties文件资源的方法解析

程序员文章站 2022-07-10 17:42:49
前言InputStream is = DBUtil.class.getClassLoader().getResourceAsStream("utils/config.properties");如上图,显示了类与配置文件的存储位置。利用DBUtil类动态获的获得文件config.properties的位置,从而获得此文件的资源,可以采用以上代码,但是每部分的含义理解起来却有些困难,接下来对每部分进行详细说明,从而可以彻底理解。一、DBUtil&nb...

前言

InputStream is = DBUtil.class.getClassLoader().getResourceAsStream("utils/config.properties");

servlet--利用getResourceAsStream获取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文件的路径为出发点。
servlet--利用getResourceAsStream获取properties文件资源的方法解析
如果想要获得Class对象,通常由三种方法,下面分别列举出来:

  1. 类名.class
  2. 类的实例对象.getClass()
  3. Class.forName(“全类名”) ,所谓全类名即包名.类名.
    例如:定义了自定义类Student,包名为POJO
    那么对应的三种方法实例分别是:
    1.Student.class
    2.Student stu = new Student();
    stu.getClass()
    3.Class.forName(“POJO.Student”)
    通过以上三种方式,都能获得自定义类Student的Class对象,基本类型以及JAVA中其它类型也是如此,但是对于JAVA中提供的各种类型,全类名比较难找出,因此,很少采用它来获得Class对象

总结

以上就是今天要讲的内容,本文仅仅介绍了前面两部分,将在[后一篇](https://blog.csdn.net/m0_51286391/article/details/109852125)中解析剩下两个方法。

本文地址:https://blog.csdn.net/m0_51286391/article/details/109837896