zoukankan      html  css  js  c++  java
  • 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

        

  • 相关阅读:
    rs
    stm32f767 usoc3
    stm32f767 RTT 日志
    stm32f767 标准库 工程模板
    stm32f767 HAL 工程模板
    docker tab 补全 linux tab 补全
    docker anconda 依赖 下载 不了
    docker run 常用 指令
    linux scp 命令
    Dockerfile 常用参数说明
  • 原文地址:https://www.cnblogs.com/zad27/p/11204702.html
Copyright © 2011-2022 走看看