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

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

    

猜你喜欢

转载自www.cnblogs.com/zad27/p/11204702.html