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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值