在应用程序中,经常有需求获取资源文件的路径,并加载之。

其中一个方法就是使用绝对路径,比如:

File file = new File("D://xxxx");

但是不支持跨系统,linux上是不用C盘D盘的。

要做到像JVM一样牛逼,跨系统实现,需要使用绝对路径。

Class类提供的getResource方法就可以实现此功能。下边梳理下getResource使用时的一些情况:

path不以’/'开头时,默认是从此类所在的包下取资源;

path 以’/'开头时,则是从ClassPath根下获取;

classPath是指编译后字节码所放的路径,比如web项目,src不是classpath, WEB-INF/classes,lib才是classpath

a7aa12c2c53a

image.png

如截图中的例子,一个打印了当前类文件的包路径。一个打印了classPath所在的包路径。

例子中举例资源文件A,B,C查找的方法。

TestSource.class.getResource("A.conf");

TestSource.class.getResource("/B.conf");

TestSource.class.getResource("/com/lxqn/jiapeng/threadPool/C.conf");

Class.getResource和Class.getResourceAsStream在使用时,路径选择上是一样的。后者返回的是流,方便封装工具类处理。

Class.getClassLoader().getResource使用

path不能以’/'开头时;

path是从ClassPath根下获取;

从结果上看TestSource.class.getResource("/") == TestSource.class.getClassLoader().getResource("") 等效的。

所以上述A,B,C的资源获取,可以写成如下:

TestSource.class.getClassLoader().getResource("com/lxqn/jiapeng/reflect/A.conf");

TestSource.class.getClassLoader().getResource("B.conf");

TestSource.class.getClassLoader().getResource("com/lxqn/jiapeng/threadPool/C.conf");

a7aa12c2c53a

image.png

Logo

更多推荐