一、基本知识点
- 如果读取资源文件的程序不是servlet,就只能使用类装载器去读取;
- dao中的方法操作数据库都需要读取资源文件,资源文件读取一次即可,即类加载一次,代码放在静态代码块中;
- 静态代码块不能抛出异常,使用try/catch;
- 类装载器的文件不能太大,因为通过类装载会将整个文件导入内存,从而出现内存溢出,但是配置文件通常也不大;
- src下的文件发布到服务器是都会存放在classes文件夹下,classes下的类能够被服务器调用是通过类加载器实现的,所以我们把配置文件放在src目录下
二、模板代码
package dao;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class UserDao {
public static Properties config = new Properties();
static{
try {
InputStream in = UserDao.class.getClassLoader().getResourceAsStream("db.properties");
//db.properties文件存放在src下,得到装载器获取流数据
config.load(in);
//将流数据装载到config里面
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
//数据库无法读取属于致命异常,直接抛出初始化错误
}
}
public void updata() throws Exception{
//dao类中的方法“示例”
String url = config.getProperty("url");//获取url
}
}
目录结构:
注意事项
类装载方式如果配置信息更新,刷新网页后会继续使用原始的配置信息,应该如何处理?
三、读取更新后的数据
//通过类装载的方式得到资源文件的位置,再通过传统方式读取资源文件的数据,这样就可以读取到更新后的数据
String path = UserDao.class.getClassLoader().getResource("db.properties").getPath();
//把资源当作url返回,getPath获取资源路径,再使用普通的流方法
FileInputStream in = new FileInputStream(path);
Properties config = new Properties();
config.load(in);