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

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Ashtar_Eve/article/details/52634895
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)则是从类路径进行读取文件,会更方便一些?



展开阅读全文

没有更多推荐了,返回首页