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

        

  • 相关阅读:
    Java Synchronized的用法
    静态方法中不能new内部类的实体对象
    android ViewGroup事件分发机制
    安卓设备通过USB接口读取UVC摄像头权限问题
    android View事件分发机制结论
    函数指针与指针函数以及typedef
    GeoHash
    快速排序,C语言实现
    字符串的几个算法
    ANSI C与GNU C
  • 原文地址:https://www.cnblogs.com/zad27/p/11204702.html
Copyright © 2011-2022 走看看