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

来源:互联网 发布:php采集网站数据 编辑:程序博客网 时间:2024/06/05 02:26
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"));}}