JAVAWEB静态代码块读取文件问题

来源:互联网 发布:域名别名是什么意思 编辑:程序博客网 时间:2024/05/19 13:10
package cn.util;import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileReader;import java.io.IOException;import java.io.InputStream;import java.io.Reader;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Properties;import cn.test.ImageTest;public class JdbcUtils {private static Properties config = new Properties();static {try {System.out.println(123);InputStream in = null;Reader reader = null;//@SuppressWarnings("resource")try {//reader = new FileReader("db.properties");//ImageTest im = new ImageTest();//静态代码中不能够用文件的方式加载文件??????????????//FileInputStream fis = new FileInputStream(new File("db.properties")); in = new BufferedInputStream(new FileInputStream(  new File("db.properties")));  } catch (Exception e) {e.printStackTrace();System.out.println("error");} finally {//in.close();}//FileInputStream fis = new FileInputStream("classpath:db.properties");config.load(in);//config.load(JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties"));System.out.println(1456);//装载并实例化这个类Class.forName(config.getProperty("driver"));} catch (Exception e) {throw new ExceptionInInitializerError(e);}}public static Connection getConnection() throws SQLException {return DriverManager.getConnection(config.getProperty("url"),config.getProperty("username"),config.getProperty("password"));}public static void release(Connection conn , Statement st ,ResultSet rs){if(rs!=null){try {rs.close(); } catch (Exception e) {e.printStackTrace();}rs = null;}if(st!=null){try {st.close();} catch (Exception e) {e.printStackTrace();}st=null;}if(conn != null ){try {conn.close();} catch (Exception e) {e.printStackTrace();}conn = null;}}}

关于Properties的静态代码块读取方式,效率和安全性都很高,

但是怀疑有没有其他的方法可以读取到输入流,于是在Web项目下测试了一下,

发现会报文件找不到的错误。

原因是因为File是从Web应用的根目录读取文件的,

并不是从src和content中,所以放到这两个文件夹中都无法读取到文件,

与静态代码块无关。


结论:将db.properties文件放到应用根目录即可。

File是从应用启动根目录/绝对路径开始读取文件的。同类的FileReader应该也是。

而ClassLoader.getSystemResource(name)则是从类路径进行读取文件,会更方便一些?



0 0
原创粉丝点击