在应用程序中,经常有需求获取资源文件的路径,并加载之。
其中一个方法就是使用绝对路径,比如:
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

如截图中的例子,一个打印了当前类文件的包路径。一个打印了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");

参考博文:
https://www.cnblogs.com/yejg1212/p/3270152.html
http://blog.csdn.net/javaloveiphone/article/details/51994268
网友评论