Java读取Classpath文件_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java读取Classpath文件

Java读取Classpath文件

 2013/12/4 21:26:20  须等待  程序员俱乐部  我要评论(0)
  • 摘要:Classloader是从classpath中读取资源的一个类,一般我们用classloader来加载class,实际上,但凡是处在classpath中的文件,我们称之为资源,都可以用classloader来读取。在java中的API里,有两种方式来使用classpath读取资源。System.out.println(Bootstrap.class.getResource(""));System.out.println(Bootstrap.class.getResource("/"))
  • 标签:文件 Java class
Classloader是从classpath中读取资源的一个类,一般我们用classloader来加载class,实际上,但凡是处在classpath中的文件,我们称之为资源,都可以用classloader来读取。

在java中的API里,有两种方式来使用classpath读取资源。
System.out.println(Bootstrap.class.getResource(""));
System.out.println(Bootstrap.class.getResource("/"));
System.out.println(Bootstrap.class.getClassLoader().getResource(""));
System.out.println(Bootstrap.class.getClassLoader().getResource("/"));
System.out.println(Bootstrap.class.getResource("name.properties"));
System.out.println(Bootstrap.class.getResource("/name.properties"));
System.out.println(Bootstrap.class.getClassLoader().getResource("name.properties"));


class里有一个getResource方法,classloader类里也有getResource方法,这两种API都可以从classpath中读取资源,但是也有一些区别。

class的getResource方法实际上也是用classloader来读取资源,但是起始路径不一样
System.out.println(Bootstrap.class.getResource(""));

这个API的起始路径是当前类的路径,如果要正确的读到资源,目标资源必须和当前class在同一级,或子目录里,可以用相对路径读取到。
System.out.println(Bootstrap.class.getResource("/"));
System.out.println(Bootstrap.class.getClassLoader().getResource(""));

加上/的读取方式,和调用classloader读取是同一个效果,这个读取代表的是某个classpath下的根路径。

System.out.println(Bootstrap.class.getClassLoader().getResource("/"));

这是一种错误的读取方式,使用classloader的时候,不可以指定/来读取。

例:
System.out.println(Bootstrap.class.getResource("name.properties"));
System.out.println(Bootstrap.class.getResource("/name.properties"));
System.out.println(Bootstrap.class.getClassLoader().getResource("name.properties")

第一种读取,代表读取当前类同一级的文件name.properties
第二种和第三种读取等效,都是读取任意classpath根路径下的name.properties文件

Remark
在启动服务的时候,所有的依赖项都是以目录的形式存在在classpath下,这样classloader才能一个一个去加载,而getResource的API里的路径,也都是相对于每一个依赖的目录的路径。
上一篇: Castle.DynamicProxy Part 1: ClassProxy 下一篇: 没有下一篇了!
发表评论
用户名: 匿名