A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Inspur 中级黑马   /  2013-9-15 15:03  /  1101 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Inspur 于 2013-9-20 10:53 编辑

在听张孝祥老师讲用类加载器管理和配置文件这一节课时,讲了两种方法加载配置文件。
第一种:获取类加载器,然后用类加载器的getResourceAsStream()的方法
第二种:直接使用类字节码身上自带的getResourceAsStream()的方法
但是,两种方法的参数没大听懂,具体各个方法应该传递哪些参数,请高手详细解答,谢谢

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

2 个回复

倒序浏览
1.每一个 .class 文件都被加载到内存中,这是类加载器的功能。类加载器不但能加载.class文件,还能加载普通文件,例:
InputStream ips = ReflectHashCode.class.getClassLoader().getResourceAsStream(“cn/itcast/day1/config.properties”);
//在cn/itcase/day1 目录下查找 config.properties 文件
//通过类的class找到类加载器( getClassLoader() ), 然后用类加载器加载普通文件( getResourceAsStream(), 在classpath指定的目录下逐一的查找要加载的文件 )
配置文件都放在 存放类( .class)文件的目录下

2.class 本身也自带一种加载资源文件的方式,实际上是内部调用了classloader,例:
InputStream ips = ReflectHashCode.getResourceAsStream(“config.properties”);
只需要写要加载的配置文件的名字就可以,不需要写目录,相对路径,默认在自己所在的包下面查找。如果在所在包的子包下面,路径添加子包名称,例:resource/config.properties
还可以用绝对路径如果上例改为,cn/itcast/day1/config.properties 就成了绝对路径,默认从classpath的根目录下查找,这时候就要从根开始写上完整的绝对路径 ,希望对你有用。
回复 使用道具 举报
eclipse会自动把src文件下的非java文件复制到bin目录下,相对于src就相当于bin
ClassLoader.getResourceAsStream(className)是相对于src目录,路径名前面不加“/”
Class.getResourceAsStream(className)有两种:
如果className前面不加“/”,就是相对于当前java文件的上一级,当前文件的包
如果className前面加“/”,就是相对于src的路径
下面这三个得到的InputStream是同一个
cn.itheima.day1.ReflectTest2.class.getResourceAsStream("/cn/itheima/day1/config/config.properties");
cn.itheima.day1.ReflectTest2.class.getResourceAsStream("config/config.properties");
cn.itheima.day1.ReflectTest2.class.getClassLoader().getResourceAsStream("cn/itheima/day1/config/config.properties");
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马