linux读取class下的文件路径,Class类getResource方法获取文件路径
在应用程序中,经常有需求获取资源文件的路径,并加载之。其中一个方法就是使用绝对路径,比如:File file = new File("D://xxxx");但是不支持跨系统,linux上是不用C盘D盘的。要做到像JVM一样牛逼,跨系统实现,需要使用绝对路径。Class类提供的getResource方法就可以实现此功能。下边梳理下getResource使用时的一些情况:path不以’/'开头时,默认
在应用程序中,经常有需求获取资源文件的路径,并加载之。
其中一个方法就是使用绝对路径,比如:
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
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");
image.png
更多推荐
所有评论(0)