类名.class.getClassLoader().getResourceAsStream(“.“);和ClassLoader.getSystemResourceAsStream(“.“)的区别!!!

 这里通过如下两个读取properties文件的代码进行举例:

InputStream is = DruidUtils.class.getClassLoader().getResourceAsStream("servletDemo.properties")
 InputStream is = ClassLoader.getSystemResourceAsStream("servletDemo.properties");

它们之间的不同点为:

  1. 资源查找路径不同:DruidUtils.class.getClassLoader().getResourceAsStream("servletDemo.properties")会从DruidUtils类加载器的类路径中查找资源文件,而ClassLoader.getSystemResourceAsStream("servletDemo.properties")会从系统类加载器的类路径中查找资源文件。

  2. 类加载器的范围不同:DruidUtils.class.getClassLoader()返回指定类(这里是DruidUtils的类加载器,而ClassLoader.getSystemResourceAsStream()使用系统类加载器。

  3. 类路径定义不同:ClassLoader.getSystemResourceAsStream("servletDemo.properties")中的类路径是相对于系统类路径的,而DruidUtils.class.getClassLoader().getResourceAsStream("servletDemo.properties")中的类路径是相对于DruidUtils类所在的类路径的。

综上所述,两者的主要区别在于资源查找路径和类加载器的范围不同。一般来说,如果你想要查找与指定类相关的资源文件,可以使用DruidUtils.class.getClassLoader().getResourceAsStream("servletDemo.properties");如果你想要查找与系统类路径相关的资源文件,可以使用ClassLoader.getSystemResourceAsStream("servletDemo.properties")

 它们之间也具有共同点如下:

  1. 获取资源文件的输入流:两者都是用来获取资源文件的输入流。无论使用哪种方式,都可以获取指定资源文件的输入流,以便读取和操作它。

  2. 使用相对路径:两者都使用相对路径来查找资源文件。指定的资源文件名字可以是相对于类路径的相对路径(相对于类加载器或系统类加载器的类路径)。

  3. 返回的是输入流:无论是DruidUtils.class.getClassLoader().getResourceAsStream("servletDemo.properties")还是ClassLoader.getSystemResourceAsStream("servletDemo.properties"),它们返回的都是资源文件的输入流。通过这个输入流,可以读取资源文件中的内容。

你可能感兴趣的:(java)