文档章节

对Class.getResourceAsStream和ClassLoader.getResourceAsStream方法所使用的资源路径的解释

猪刚烈
 猪刚烈
发布于 2014/10/12 11:47
字数 627
阅读 6
收藏 0
这是个很基础的问题了,这里提供一些示例,帮助快速理解和记忆这个问题。

在该方法的文档:http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResourceAsStream%28java.lang.String%29 中详细有描述了它接收的路径是如何定义的! 本文原文出处: blog.csdn.net/bluishglc/article/details/38753047 严禁任何形式的转载,否则将委托CSDN官方维护权益!

关于Class.getResourceAsStream

首先, 我们必须先了解根路径“/”是如何定义的,这对我们使用getResourceAsStream准确加载文件是很重要的。首先,我们要明白这个根路径是对应类所处类路径上的根目录!什么意思呢?假如一个项目经过编译之后生成了如下class文件和目录结构:


com
   |-github
          |-demo
          |    |-A.class
          |    |-1.txt
          |-B.class
          |-2.txt


在这样的编译输出目录下,文件"1.txt"的绝对路径名为:"/com/github/demo/1.txt文件"2.txt"的绝对路径名为:"/com/github/2.txt
如同getResourceAsStream方法文档上的解释:以/开头时是绝对路径,与类路径不同的是路径上的“."换成了"/"。

接下着我们看相对路径!

首先我们必须明确“相对”路径总是指相对于当前class的路径!

例如,如果我们使用

InputStream is= A.class.getResourceAsStream("1.txt");

路径不是以/开头,说明这是一个相对路径,相对的是A.class这个文件,所以,这里的“1.txt”所指的正确位置是与A.class处于同一目录下的1.txt文件,这一文件是存在的,所引不会报错。

如果我们按相对路径的方式通过A去加载2.txt,则路径应该这样描述:

InputStream is= A.class.getResourceAsStream("../2.txt");   

是的,用“.."表示上一级目录。

如果我们按相对路径的方式通过B去加载1.txt,则路径应该这样描述:   

InputStream is= B.class.getResourceAsStream("demo/1.txt");   

注意!demo前是没有/的,这是一个相对路径,是相对于B所在包下的demo子包里的1.txt文件,所以这个路径也是正确无误的!

关于ClassLoader.getResourceAsStream

class.getResourceAsStream最终调用是ClassLoader.getResourceAsStream

只是在这之前对参数进行了调整。如果参数已/开头,则去除/,否则把当前类的包名加在参数的前面。

在使用ClassLoader.getResourceAsStream时,路径直接使用相对于classpath的绝对路径,并且不能已 / 开头。

InputStream resourceAsStream = ClassLoader.getSystemResourceAsStream("com/github/demo/1.txt");



本文转载自:http://blog.csdn.net/bluishglc/article/details/38753047

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
java获取路径

JAVA 笔记 ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别 Class.getResourceAsStream() 会指定要加载的资源路径与当前类所在包的路径一致。 例如你写了一个MyTes...

浮躁的码农
2016/02/22
11
0
Java文件路径(getResource)

getResourceAsStream ()返回的是inputstream getResource()返回:URL Class.getResource("") 返回的是当前Class这个类所在包开始的为置 Class.getResource("/") 返回的是classpath的位置 getC...

vshcxl
2016/04/22
156
0
ClassLoader.getResourceAsStream(name);获取配置文件的方法

ClassLoader.getResourceAsStream(name);路径问题 InputStream in = getClass().getResourceAsStream('/'+"spring-beans.dtd");表示从classs目录下面的找文件,文件放在src下面就可以了. Inp......

Galy_绿
2015/12/06
56
0
android 生成jar包里面包含资源文件

背景:工作中需要开发一个广告插件,并提供给其它人使用。这里就需要把自己的插件程序,打成jar来提供给他人引用。 但是遇到一个问题:插件程序中无法使用资源文件。 试过以下几种方式解决:...

青莲居士
2015/10/14
4.2K
0
MapReduce 中的两表 join 几种方案简介

概述 在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的。而在HADOOP中进行JOIN操作,同样常见且耗时,由于Hadoop的独特设计思想,当进行JOIN操作时,有一些特殊的技巧。 本文首...

大数据之路
2012/12/11
0
8

没有更多内容

加载失败,请刷新页面

加载更多

原型模式

1、原型模式-定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 克隆(浅度克隆->拷贝值类型或者引用,深度克隆->创建新的对象,开辟新的内存) 例如客户端知道抽象Pro...

阿元
今天
57
0
awk命令扩展使用操作

awk 中使用外部shell变量 示例1 [root@centos01 t1022]# A=888[root@centos01 t1022]# echo "" | awk -v GET_A=$A '{print GET_A}'888[root@centos01 t1022]# echo "aaaaaaaaaaaaa" | aw......

野雪球
今天
49
0
深入解析MySQL视图VIEW

Q:什么是视图?视图是干什么用的? A:视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。   通过视图,可以展现基表的部分数据;...

IT--小哥
今天
53
0
虚拟机学习之二:垃圾收集器和内存分配策略

1.对象是否可回收 1.1引用计数算法 引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时候计数器值为0的对象就是不可能...

贾峰uk
今天
57
0
smart-doc功能使用介绍

smart-doc从8月份底开始开源发布到目前为止已经迭代了几个版本。在这里非常感谢那些敢于用smart-doc去做尝试并积极提出建议的社区用户。因此决定在本博客中重要说明下smart-doc的功能,包括使...

上官胡闹
昨天
54
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部