• 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

        

  • 相关阅读:
    927小程序繁星计划峰会 · 看完这七大话题 你会更了解阿里小程序
    不吹不黑,今天我们来聊一聊 Kubernetes 落地的三种方式
    虽然他们说是水题,但我觉得思想蛮好的
    新学dfs(看懂了)
    01背包,死记硬背(我是真的蠢)
    装箱问题(太笨、还没想通)
    高精度乘法,string中的坑
    双十一用python秒杀京东好货!
    高精度减法用string 和 stack
    n阶汉诺塔 记住吧。。
  • 原文地址:https://www.cnblogs.com/zad27/p/11204702.html
Copyright © 2020-2023  润新知