您的位置:首页 > 编程语言 > Java开发

java_web12-WEB应用中的普通Java程序如何读取资源文件

2013-02-03 22:50 661 查看
12-WEB应用中的普通Java程序如何读取资源文件

摘要: WEB应用中的普通Java程序如何读取资源文件

public class ServletContextDemo6 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		UserDao userdao = new UserDao();
		userdao.add2();
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}

package cn.com.rong.dao;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class UserDao {
	/*不能通过httpservlet读取,那是servlet层,dao层不能与servlet层耦合
	 * 如果读取资源文件的程序不是servlet的话,就只能通过“类装载器”读了*/
	//-----------------写在static中------------------------------------------------------
	/*像配置的资源文件,我们通常只读一次,像读取连接数据库的数据
	 * 所以我们把他写进静态代码块,这样所有的方法(CURD)都可以
	 * 使用
	 * */
	private static Properties dbconfig = new Properties();
	static {
		try{
		InputStream in = UserDao.class.getClassLoader().getResourceAsStream("db.properties");
		dbconfig.load(in);
		}catch(Exception e){
			throw new ExceptionInInitializerError();
		}
	}
	public void update() throws IOException{
		System.out.println(dbconfig.getProperty("url"));
	}
//--------------------如果不写在static中------------------------------------------
	private void add() throws IOException {
		System.out.println(UserDao.class.getClassLoader().getResource("/"));
		/*返回的是class所在路径所以,下面的要放在classes下面
		在eclipse中放在src目录下*/
		InputStream in1 = UserDao.class.getClassLoader().getResourceAsStream("db.properties");
		Properties pro = new Properties();
		pro.load(in1);
		System.out.println(pro.getProperty("url"));
	}
	
	/*注意:
	 * 通过类加载器加载的源文件不能太大,否则内存溢出
	 * 类装载器,会把该源文件按照类的方式读进内存*/
	/*问题:1如第一段程序代码(static的)当我们更改db.properties文件中的内容时,我们读到的内容是最新的吗?
	 * 答:不是,因为我们使用static内容只加载一次,所以不变。
	 * 问题2,如第二段程,序当我们更改db.properties文件中的内容时,我们读到的内容是最新的吗?
	 * 答:不是,因为读取方式是通过类加载器加载的,类只加载一次,当要读取文件时,检查内存中有这个文件,那么ok
	 * 问题3,我们要读到最新的数据怎么办?
	 * 答:通过类加载方式得到源文件的位置,再通过传统方式读取源文件数据,这样可以读取到更新后的文件*/
	public void add2() throws IOException{
		/*通过类加载方式得到源文件的位置,再通过传统方式读取源文件数据,这样可以读取到更新后的文件*/
		String path = UserDao.class.getClassLoader().getResource("db.properties").getPath();
		FileInputStream in = new FileInputStream(path);
		Properties pro = new Properties();
		pro.load(in);
		System.out.println(pro.getProperty("url"));
	
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: