黑马程序员技术交流社区

标题: 两个方法的参数问题 [打印本页]

作者: Inspur    时间: 2013-9-15 15:03
标题: 两个方法的参数问题
本帖最后由 Inspur 于 2013-9-20 10:53 编辑

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

作者: 冷漠无天    时间: 2013-9-15 15:18
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的根目录下查找,这时候就要从根开始写上完整的绝对路径 ,希望对你有用。
作者: Yuan先生    时间: 2013-9-15 15:18
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");




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2