Java resource 读取解释,绝对路径和相对路径

摘要:
Java只需要正确的环境来查找资源。绝对路径和相对路径资源都引用资源名称:“/path/resource.xml”是资源名称;

java如何加载资源?

Java 从环境中读取资源,在多数情况下,java直接在Classpath下检索jar. 因为加载资源和代码运行位置无关,java中的资源加载被称为location independent,java仅需要正确的环境即可找到资源.

绝对路径和相对路径

资源的引用都是使用资源名: getResourceAsStream("/path/resource.xml");

其中"/path/resource.xml"就是资源名;

资源名可以:

  • 绝对路径,例如"/path/resource.xml"; 以''/''开头即为绝对路径

  • 相对路径,例如"path/resource.xml";

相对路径是指,相对于方法被调用的位置,路径会拼接,而绝对路径则会将/移除后直接使用

package my.location;

class ResourceFinder {
...
public void findResources(){
  InputStream stream1 =
getClass().getResourceAsStream("/path/resource.xml");
  InputStream stream2 =
getClass().getResourceAsStream("path/resource.xml");
}
...
}
  • stream1获取资源的路径为path/resource.xml

  • stream2获取资源路径为my/location/path/resource.xml

ClassLoader 和Class对文件名的不同处理

ClassLoader.getResource()Class.getResource() 工作方式不同

ClassLoader 直接使用给定string作为资源名而不使用绝对路径/相对路径的转换,因此string不能以/开头

package my.location;

class ResourceFinder {
...
public void findResources(){
  InputStream stream1 =
getClass().getResourceAsStream("/path/resource.xml");
  InputStream stream2 =
getClass().getResourceAsStream("path/resource.xml");
  InputStream stream3 =
getClass().getClassLoader().getResourceAsStream("path/resource.xml");
  InputStream stream4 =
getClass().getClassLoader().getResourceAsStream("/path/resource.xml");

}
...
}

stream3的文件路径为 path/resource.xml,而stream4的路径是非法的

参考文献:

http://www.thinkplexx.com/learn/howto/java/system/java-resource-loading-explained-absolute-and-relative-names-difference-between-classloader-and-class-resource-loading

    

免责声明:文章转载自《Java resource 读取解释,绝对路径和相对路径》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇lua for循环ansible用普通用户执行root权限的命令 + script模块下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WPF数据绑定(二)

前面讲了最近本的两种数据绑定,这次讲讲资源绑定和Context绑定 1、资源绑定 同样不需要写代码,仅仅需要配置XAML就可以了。 1 <TabItem Header="ResourceBinding"> 2 <StackPanel> 3...

生物数据库与在线工具

生物数据库       生物数据库是收集自科学实验、出版文献、高通量实验技术和计算分析等生命科学信息库,它包含来自基因组学、蛋白质组学、代谢组学、微阵列基因表达和系统发育学等领域的信息。       生物数据库大致可分为序列、结构和功能数据库。序列数据库储存核酸和蛋白质序列;结构数据库储存RNA和蛋白质的结构信息;功能数据库提供关于基因产物的生理作用信息(...

阻塞队列和死锁

BlockingQueue        BlockingQueue是并发容器的一种,在J.U.C的包路径下,是线程安全的一种实现,是基于阻塞队列的,该接口提供了相对于Queue的新的put()和take()操作。put()添加元素时,当阻塞队列满的情况下会阻塞下来,当有空间时才能进行添加操作,添加到队列尾部;take()删除元素时,当队列为空时,也会阻塞...

linux/mac系统的软链接文件与硬链接文件

1、硬连接只能使用在文件上,不可以使用在文件夹上。至于文件前面的硬链接数字的含义如下: 如图标注区,为硬连接的数量,文件前的数字1表示没有硬链接。文件夹前面的数字至少是2,含义是这个文件夹是空文件夹,当数字大于2时,比如为n>2,则表示这个文件夹下面有个n-2个子文件和文件夹的和;因此从文件夹前面的这个数字可以知道文件夹下面到底有多少文件和文件夹(一...

CAD启动找不到AC1ST16.DLL

今天在安装Win7 x64上CAD2006启动报错:找不到ac1st16.dll文件。 一查,是系统变量的问题。在系统变量Path中cad的路径为: C:Program Files (x86)Common FilesAutodesk Shared 然后将其他修改为如下即可: C:Program Files (x86)Common FilesAuto...

JSP基础知识➣获取参数和过滤器(四)

JSP表单提交和参数获取   JSP表单提交的两种方式:post和get,通过这两种方式提交的参数到后台,获取参数的值主要由request来处理,获取值的方式有以下几种: getParameter(): 使用 request.getParameter() 方法来获取表单参数的值。 getParameterValues(): 获得如checkbox类(名字...