通过IO流读取配置文件的信息
1.创建配置文件db.properties
name=aa
password=bb
2.创建测试类
package com.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Test {
privatestatic InputStream inStream=null;
privatestatic Properties pro;
//把代码放在静态代码块中,是为了在new对象时能够首先执行代码块
static{
try{
//通过反射获取InputStream流
//注意:db.properties 与Test.java 放在同一包下
inStream=Test.class.getResourceAsStream("db.properties");
//创建Properties对象
pro=newProperties();
//将输入流载入properties对象中
pro.load(inStream);
}catch (IOException e) {
e.printStackTrace();
}
}
publicvoid readProperties(){
//获取Properties 文件中属性,并输出
System.out.println(pro.getProperty("name"));
System.out.println(pro.getProperty("password"));
}
publicstatic void main(String[] args) {
//在main() 方法中 调用readProperties()方法
Testt=new Test();
t.readProperties();
}
}
使用工厂模式读取配置文件
1.编写db.properties
name=aa
password=bb
2.编写读取文件的接口类UserDao.java
package com.strong.dao;
public interfaceUserDao {
public abstract void printInfo();
}
3.编写读取文件的实现类
package com.strong.dao.impl;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import com.strong.dao.UserDao;
public class UserDaoImpl implements UserDao {
privatestatic InputStream inStream;
privatestatic Properties prop;
static{
try{
prop= new Properties();
inStream=UserDaoImpl.class.getClassLoader().getResourceAsStream("db.properties");
prop.load(inStream);
}catch (IOException e) {
e.printStackTrace();
}
}
@Override
publicvoid printInfo() {
Stringusername = prop.getProperty("username");
Stringpassword = prop.getProperty("password");
Stringurl = prop.getProperty("url");
Stringdriver = prop.getProperty("driver");
System.out.println(username);
System.out.println(password);
System.out.println(url);
System.out.println(driver);
}
}
4.编写工厂类的配置文件factory.properties ,里面存储着接口类和实现类的名称
以便于根据不同的接口,返回不同的实现类
UserDao=com.strong.dao.impl.UserDaoImpl
5.编写工厂类
package com.strong.utils;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import com.strong.dao.impl.UserDaoImpl;
public class DaoFactory {
privatestatic InputStream inStream;
privatestatic Properties prop;
//读取工厂的配置文件
static{
try{
prop= new Properties();
inStream=UserDaoImpl.class.getClassLoader().getResourceAsStream("factory.properties");
prop.load(inStream);
}catch (IOException e) {
e.printStackTrace();
}
}
//根据不同的类,读取不同的配置文件
publicstatic <T> T newInstance(Class<T> clazz) throws Exception{
//获得类名
StringsimpleClassName = clazz.getSimpleName();
//读取factory的配置文件,通过类名取出完整的实现类名
StringclassName = prop.getProperty(simpleClassName);
//根据完整的实现类名,获得类的实例,并返回
return (T) Class.forName(className).newInstance();
}
}
6.编写测试类,通过工厂模式调用方法
package com.strong.test;
import com.strong.dao.UserDao;
import com.strong.dao.impl.UserDaoImpl;
import com.strong.utils.DaoFactory;
public class Test {
publicstatic void main(String[] args) throws Exception {
//通过工厂类获取对象
UserDaoudao = (UserDao)DaoFactory.newInstance(UserDao.class);
udao.printInfo();
}
}
有的地方还需优化