Properties:按key-value读取属性文件 - 内容无序
// 读取属性文件到Properties集合中
public static void test02() throws IOException{
Properties p = new Properties();
/*
* 加载属性文件(实际上,只要文件内容是:属性名=属性值 的格式,都可以加载,与文件的后缀名无关)
*/
p.load(
Test03_Properties.class // 获取当前类的Class对象
.getClassLoader() // 获取类加载器,用于加载classpath类路径下的资源,即src目录下
.getResourceAsStream("data.properties") // 加载类路径下的指定的文件
); // 暂时记住,固定写法
//p.load(Test03_Properties.class.getClassLoader().getResourceAsStream("data.properties"));
System.out.println(p);
System.out.println(p.getProperty("name"));
}
BufferedReader:按行读取属性配置文件 - 内容有序
/**
* 创建对象的工厂类
*
* 根据类路径下的objs.properties属性文件中的配置来创建对象
* 要求:
* 1.文件中不能有空格
* 2.注意编写顺序,由于对象间可能存在依赖关系,被依赖的对象必须放在依赖对象的前面
*
* @author Mac
* @date 2020年10月30日 下午2:50:07
*/
public class ObjectFactory {
// 定义一个Map集合,用来存储对象
public static Map<String, Object> objs = new HashMap<String, Object>();
// 类加载时读取属性文件,创建相应的对象,对象是单例的
static { // 静态代码块
// BufferedReader-缓冲字符输入流、InputStreamReader-字节输入流转换成字符输入流
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(ObjectFactory.class.getClassLoader().getResourceAsStream("objs.properties")));) {
String line = null;
while ((line = reader.readLine()) != null) { // 一行一行读
String[] entry = line.split("=");
objs.put(entry[0], Class.forName(entry[1]).newInstance()); // 反射
}
} catch (Exception e) {
throw new ExceptionInInitializerError();
}
}
// 工厂方式,用来获取对象
public static Object getObject(String key) {
return objs.get(key);
}
}