`
vyloy
  • 浏览: 80445 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

不依赖系统路径获得资源。getResource()和getResourceAsStream()

阅读更多
ClassLoader.getSystemResource();
ClassLoader.getSystemResourceAsStream();
//这些方法用来获得在同一CLASSPATH中的资源


System Resources

A system resource is a resource that is either built-in to the system, or kept by the host implementation in, for example, a local file system. Programs access system resources through the ClassLoader methods getSystemResource and getSystemResourceAsStream.

For example, in a particular implementation, locating a system resource may involve searching the entries in the CLASSPATH. The ClassLoader methods search each directory, ZIP file, or JAR file entry in the CLASSPATH for the resource file, and, if found, returns either an InputStream, or the resource name. If not found, the methods return null. A resource may be found in a different entry in the CLASSPATH than the location where the class file was loaded.

System resources are those that are handled by the host implemenation directly. For example, they may be located in the CLASSPATH.(当要定位的资源是本地直接实现的,例如:是位于在CLASSPATH中的)

The methods in ClassLoader use the given String as the name of the resource without applying any absolute/relative transformation (see the methods in Class). The name should not have a leading "/".(这些在ClassLoader内的方法不会进行绝对、相对地址转换,所以所传的参数name不应该以“/”开头)

ClassLoader.getResource()
ClassLoader.getResourceAsStream()
//这些方法可以根据不同的ClassLoader有不同获得方法。
//例如:AppletClassLoader,可以通过网络获得资源。


Non-System Resources

The implementation of getResource on a class loader depends on the details of the ClassLoader class. For example, AppletClassLoader:

  • First tries to locate the resource as a system resource; then, if not found,
  • Searches through the resources in archives (JAR files) already loaded in this CODEBASE; then, if not found,
  • Uses CODEBASE and attempts to locate the resource (which may involve contacting a remote site).

All class loaders will search for a resource first as a system resource, in a manner analogous to searcing for class files. This search rule permits overwriting locally any resource. Clients should choose a resource name that will be unique (using the company or package name as a prefix, for instance).

Class.getResource()
Class.getResourceAsStream()
//在不确定类的加载方式时使用。
//会根据加载类的ClassLoader去决定怎样的方式去加载资源。
//就像ClassLoader加载Class一样。例如是AppletClassLoader网络加载,提供很好的灵活性。


会先把参数作绝对地址和相对地址转换。再委派给ClassLoader相对应的方法。
“/”开头的地址就是绝对地址,否则就是相对class的地址(会在地址前加上class的路径)。实现转换的方法如下:

private String resolveName(String name) {
  if (name == null) {
    return name;
  }
  if (!name.startsWith("/")) {
    Class c = this;
    while (c.isArray()) {
      c = c.getComponentType();
    }
    String baseName = c.getName();
    int index = baseName.lastIndexOf('.');
    if (index != -1) {
      name = baseName.substring(0, index).replace('.', '/') + "/" + name;
    }
  } else {
    name = name.substring(1);
  }
  return name;
}


参考:http://docs.oracle.com/javase/1.5.0/docs/guide/lang/resources.html
分享到:
评论

相关推荐

    附带资源的jar包

    例如,我们可以通过`Class.getResource()`或`Class.getResourceAsStream()`方法来获取到类路径下的资源。例如,如果有一个名为`config.properties`的配置文件与某个类在同一个包下,我们可以在类中这样获取: ```...

    关于java 读取eclipse下文件相对路径 关于Java的文件相对路径问题一直 ....doc

    为了保证代码在其他环境中也能正常工作,建议使用绝对路径或者基于类加载器的资源获取方式(如`ClassLoader.getResource()`或`ClassLoader.getResourceAsStream()`),而不是依赖于工作空间的相对路径。这将确保你的...

    JAVA打包后读取自身JAR中的文件.pdf

    - 在使用`getResource()`或`getResourceAsStream()`方法时,路径字符串中的"/"表示JAR文件的根目录。如果省略了前面的斜杠,则路径将会相对于类的位置。 - 确保资源文件的名称和路径与程序中指定的路径完全一致,...

    search resource about java

    1. **Class.getResource() 和 Class.getResourceAsStream()**:这两个方法允许我们通过类加载器获取到类路径下的资源。例如,`getClass().getResource("/filename.txt")`返回一个URL,`getClass()....

    java 静态代码块通过类加载器获取资源文件例子

    在获取资源文件时,我们通常会使用类加载器的getResource()或getResourceAsStream()方法。这两个方法可以从类路径中查找指定的资源文件,并返回一个URL对象或输入流,便于我们进一步处理。例如,获取名为"config....

    UrlUtil.zip_UrlUtil_java URLUtil

    使用`Class.getResource()`或`Class.getResourceAsStream()`方法可以获取到相对于类路径的资源路径,然后转化为绝对路径。 3. **取得当前类所在的ClassPath目录**:开发者可以通过`System.getProperty("java.class....

    推箱子源码

    当资源文件与JAR文件在同一目录下时,可以使用绝对路径或者相对路径的方式加载资源,例如使用`getResource()`或`getResourceAsStream()`方法。 此外,我们还可以从这个案例中学到一些关于Java项目组织和资源管理的...

    javaweb 读取 classes 下的文件

    `ServletContext`提供了`getResourceAsStream()`和`getResource()`方法。例如: ```java ServletContext context = servlet.getServletContext(); InputStream inputStream = context.getResourceAsStream("/WEB-...

    ServletContext读取web资源_动力节点Java学院整理

    与getResourceAsStream()类似,但此方法可以获得资源的文件系统路径。 #### 使用getResource()方法 getResource方法返回一个URL对象,该URL对象对应于给定资源的路径。 ```java ServletContext context = this....

    dom4j从jar包中读取xml文件的方法

    3. `getResource`和`getResourceAsStream`方法用于获取JAR包内资源的URL和输入流。 4. 路径的处理,理解资源在JAR包内的相对路径。 通过这些知识点,开发者可以成功地在Java应用中读取包含在JAR包内的XML文件,而...

    解决SpringBoot jar包中的文件读取问题实现

    总之,解决SpringBoot jar包中的文件读取问题的关键在于,不要试图将jar内的资源视为文件系统中的文件,而应使用输入流和类加载器来访问这些资源。这样,即使在jar环境下,也能正确地读取和使用资源文件,确保应用的...

    在Java程序前添加一个闪屏

    如果闪屏图片在JAR内部,你需要使用`Class.getResource()`或`Class.getResourceAsStream()`来获取图片资源。 ```java ImageIcon icon = new ImageIcon(this.getClass().getResource("/splash.png")); ``` 4. **...

    servlet笔记二

    - **URI(Uniform Resource Identifier)**:用来标识一个资源,但不一定给出获取该资源的具体位置。它可以是绝对的也可以是相对的。 - **URL(Uniform Resource Locator)**:是一种特殊的URI,它不仅标识了一个...

    Java读取Properties文件的六种方法

    prop.load(Resources.getResource("config.properties").openStream()); } catch (IOException ex) { ex.printStackTrace(); } ``` 以上就是读取Java Properties文件的六种常见方法。选择哪种方法取决于你的具体...

    API读取Properties文件的六种方法

    与前两种方法相比,这种方式更加通用,因为它不依赖于特定的类或类加载器。 ```java import java.io.InputStream; import java.util.Properties; public class SystemResourceExample { public static void main...

    mybatis通用mapper笔记

    接着,通过指定Mapper文件路径并使用`Resources.getResourceAsStream()`方法获取输入流,然后利用`XMLMapperBuilder`解析Mapper文件。最后,构建`SqlSessionFactory`并打开`SqlSession`,准备执行数据库操作。 ####...

Global site tag (gtag.js) - Google Analytics