java-资源加载总结

思路

加载文件,我们首先要知道相对路径与绝对路径,其次就是根路径"/",项目的根路径。另外就是读取资源文件的几种手段。

访问路径的组成

URL,统一资源定位符,用于定位资源的一种方式。通常的 URL 资源访问路径由两部分构成:资源路径与资源名称。

相对路径与绝对路径

绝对路径,就是真实的路径,是计算机中完整路径,必须准确,否则不能找到,起点是系统的根目录,也就是各个盘符。比如/(Linux系统中)或者C:(Windows系统中)。

相对路径就是相对于某个基准目录的路径。相对路径必须要结合其参照路径才可组成可以准确定位资源的绝对路径。参照路径的不同,所形成的可以准确定位资源的绝对路径也是不同的。在进行资源访问时,必须要将相对路径转换为绝对路径才可完成资源的准确定位。它们的关系如下:绝对路径 = 参照路径 + 相对路径

java io的相对路径,jdk文档上讲的这个相对路径是”相对当前用户目录”也就是”java虚拟机的调用目录”。这样我们代码里的一些相对路径的例子就能统一解答了,在网页中是相对于当前文件的目录,在java代码中是相对于项目根路径(JVM运行路径)。参照路径不同也就得到了不同绝对路径。

在把绝对路径转化为相对路径的时候,两个文件绝对路径中相同的部分都可以忽略,不做考虑,只要考虑他们不同之处就可以了。
…/ 表示当前文件所在的目录的上一级目录
./ 表示当前文件所在的目录(可以省略)
/ 表示当前站点的根目录(域名映射的硬盘目录)。

相对路径的写法有两种:一种是以斜杠开头的相对路径,一种是以路径名称开头的相对路径。根据相对路径是否以斜杠开头,且路径出现的文件的不同,其默认的参照路径是不同的
以斜杠开头的路径在Java项目中一般是指项目根路径,也可以理解为JVM运行路径。以路径名称开头的相对路径,其参照路径是当前文件的目录下。
因为./可以省略,所以有些资源文件下的路径直接就表示成不以斜杠开头的路径(src/main/java/mian.class)。结合参照路径,所以路径名称开头的相对路径也能从根路径开始匹配。当参照路径时根路径时,类似/view/icon.jpeg、./view/icon.jpeg、view/icon.jpeg都能找到对应的文件。而在某些代码或者配置文件中,这三种路径格式总有一两个会报错,一方面是代码限制,另一方面可能就是参照路径的影响(比如前端页面中的资源处理)。总而言之,我们考虑相对路径时一定要考虑到参照路径,根据参照路径去选择使用相应的相对路径格式。
访问路径的具体讲解

java中读取资源文件的方法

1.使用IO流读取文件
2.使用java.util.Properties类的load()方法
3.使用java.util.Resourcebundle类的getbundle()方法
4.使用java.util.PropertyResourceBundle类的构造函数
5.使用java.lang.classloader类的getsystemresourceasstream()静态方法
6. getResource和getResourceAsStream

getResource和getResourceAsStream

Class.getResource(String path)
path不以"/“开头时,默认是从此类所在的包下取资源;
path以”/"开头时,则是从项目的ClassPath根下获取资源。在这里’/'表示ClassPath的根目录

Class.getClassLoader().getResource(String path)
path不能以"/“开头,path是指类加载器的加载范围,在资源加载的过程中,使用的逐级向上委托的形式加载的,”/“表示Boot ClassLoader,类加载器中的加载范围,因为这个类加载器是C++实现的,所以加载范围为null;
path不以”/"开头时,默认是从此类所在的包下取资源,类加载器的路径也就是项目根路径;

Class.getResourceAsStream(String path)
path不以"/“开头时,默认是指所在类的相对路径,从这个相对路径下取资源;
path以”/"开头时,则是从项目的ClassPath根下获取资源,就是要写相对于classpath根下的绝对路径。

Class.getClassLoader.getResourceAsStream(String path)
默认则是从ClassPath根下获取,path不能以’/'开头,最终是由ClassLoader获取资源。

总结

我们加载资源文件一般使用相对路径加载,主要是项目根目录中。基本使用是符合相对和绝对路径的原理。我们推荐如果要访问某个资源文件,建议使用getResource和getResourceAsStream。要是使用相应的配置文件则推荐使用Resourcebundle类。

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页