黑马程序员_用类加载器的方式管理资源和配置文件简单介绍
来源:互联网 发布:淘宝上化妆品是真的吗 编辑:程序博客网 时间:2024/05/21 18:44
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
资源文件resource通常的加载方式,用类加载器的方式管理资源和配置文件;
示例要用到的文件:
资源文件:config.properties 里面只有一行语句:className=java.util.ArrayList
java代码:
package com.itsoft;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Collection;
import java.util.Properties;
public class ReflectFrame {
public static void main(String[] args) throws Exception {
InputStream ipStream = new FileInputStream("config.properties");
Properties props = new Properties();
props.load(ipStream);
ipStream.close();
String className = props.getProperty("className");//
Collection collection = (Collection) Class.forName(className).newInstance();
collection.add("框架反射");
collection.add("资源文件");
collection.add("类加载器");
System.out.println(className);//输出:java.util.ArrayList
System.out.println(collection);//输出:[框架反射, 资源文件, 类加载器]
}
}
分析:上述代码要想运行不出错,那么config.properties必须放到工程根目录下面,此时它是一个相对路径,但是我们发布程序时,会发现,工程根目录下面的这个配置文件是不会发布到tomcat中的,所以实际应用中,这种做法是不可取的。
针对上述问题,有如下解决方法:
1.使用绝对路径:如: InputStream ipStream = new FileInputStream("F:\\workspace\\webtest\\config.properties");
注:如果要应用这种绝对路径的方法,那么一定要记住用完整的路径不是硬编码,而是运算出来的。
2.使用类加载器:
原理:我们知道,每一个class文件运行的时候都必须加载到内存中,这个功能由类加载器来提供,既然class文件它可以加载,那么其他资源文件,当然也可以由它来加载。
类加载器加载的时候,当然是从classpath的根目录路径下开始寻找并加载文件;
1)我们把config.properties文件和ReflectFrame.java放在同一目录下时:
InputStream ipStream = ReflectFrame.class.getClassLoader().getResourceAsStream("com/itsoft/config.properties");
注意:这样用法相对于classpath,所以com/itsoft/config.properties前面不需要多余的在加一个"/";这种方式的过程就是首先找到ReflectFrame这个类,然后通过该类找到它的加载器,再由类加载器去加载资源文件,那么我们能不能找到一个更直接的方法又这个类去找到相关的资源文件呢?当然可以,看下面的例子,类加载器的简化形式;
2)config.properties文件和ReflectFrame.java依旧位于同一目录下:
InputStream ipStream = ReflectFrame.class.getResourceAsStream("config.properties");
注:这种做法此时用的是相对路径的形式,它是相对于class本身的;
3)config.properties位于com.itsoft.resource包下时:
InputStream ipStream = ReflectFrame.class.getResourceAsStream("resource/config.properties");
注:同2,这种做法此时用的是相对路径的形式,它是相对于class本身的;
4)config.properties位于com.itsoft.resource包下时:
InputStream ipStream = ReflectFrame.class.getResourceAsStream("/com/itsoft/resource/config.properties");
注:它也可以用绝对路径
总结:
1.用IO流的方式读写文件,通常是用绝对路径,但是为了通用性,这个绝对路径通常不要硬编码,而是运算出来的。
2.类加载器在各种框架中普遍应用,无论是直接的加载(如1),还是简化的加载(如2,3,4),它们的本质都是ClassLoader。
3.简化的类加载器可以使用相对路径,也可以使用绝对路径。
代码(当资源文件位于不同的位置时的写法):
//InputStream ipStream = new FileInputStream("F:\\workspace\\webtest\\config.properties");
//InputStream ipStream = new FileInputStream("config.properties");
//InputStream ipStream = ReflectFrame.class.getClassLoader().getResourceAsStream("com/itsoft/config.properties");
//InputStream ipStream = ReflectFrame.class.getResourceAsStream("config.properties");
//InputStream ipStream = ReflectFrame.class.getResourceAsStream("resource/config.properties");
//InputStream ipStream = ReflectFrame.class.getResourceAsStream("/com/itsoft/resource/config.properties");
----------------------- android培训、java培训、java学习型技术博客、期待与您交流! ----------------------
详情请查看:
- 黑马程序员_用类加载器的方式管理资源和配置文件简单介绍
- 黑马程序员--用类加载器的方式管理资源和配置文件
- 黑马程序员---用类加载器的方式管理资源和配置文件
- 黑马程序员_学习笔记8用类加载器的方式管理资源和配置文件及类加载器的总结
- 黑马程序员——【Java】【高新技术】使用类加载器的方式管理资源和配置文件
- 类加载器的方式管理资源和配置文件/JavaBean/重构_内省的简单应用
- 用类加载器的方式管理资源和配置文件
- 用类加载器的方式管理资源和配置文件
- 用类加载器的方式管理资源和配置文件
- 用类加载器的方式管理资源和配置文件
- Java IO流 用类加载器的方式管理资源和配置文件
- 反射应用之用类加载器的方式管理资源和配置文件
- 28 用类加载器的方式管理资源和配置文件
- 黑马程序员----类加载器管理配置文件
- 通过类加载器管理资源和配置文件
- Java类加载器之管理资源和配置文件
- 黑马程序员_类加载器和代理
- 类加载管理资源、配置文件
- C++中堆栈,堆和栈的区别
- 11.1~11.4 同步异步下载以及请求参数设置
- 关于Bash中的source命令
- C中CONST的使用
- hibernate正向工程连接Oracle数据库的配置文件
- 黑马程序员_用类加载器的方式管理资源和配置文件简单介绍
- navicat 快捷键
- 选择排序算法
- [Python]通过websocket与js客户端通信
- Memcached学习笔记 repcached高可用方案
- 【BUG】android.content.res.Resources$NotFoundException: File res/drawable-xxhdpi/toolbar_line.png from
- Source Insight中的多行注释
- 学生信息管理系统
- C++著名程序库的比较和学习经验