关键字: java读取properties配置文件 今天要将以前一个项目的数据连接改成从properties文件中配置。找了好久,网上也不少,可就是读取文件时总是找不到文件在哪(我放在classes目录下了)。最后终于成功,记下,以做纪念。
java代码
package com.web.connection;
import java.io.ioexception;
import java.io.inputstream;
import java.sql.connection;
import java.sql.drivermanager;
import java.sql.sqlexception;
import java.util.properties;
import java.util.logging.level;
import java.util.logging.logger;
public class conn {
private string filename="/db.properties";//这里是指放在classes下,如果有包的话,前面加包名即可。例:/com/web/db.properties
private string driver = "";
private string url = "";
private string username ="";
private string password = "";
connection conn=null;
public connection getconn(){
properties p = new properties();
try {
inputstream in = conn.class.getresourceasstream(filename);// 与类在同一级,也可用/package/path/to/filename
p.load(in);
in.close();
if(p.containskey("driver")){
this.driver = p.getproperty("driver");
}
if(p.containskey("url")){
this.url = p.getproperty("url");
if(p.containskey("user")){
this.username = p.getproperty("user");
if(p.containskey("password")){
this.password = p.getproperty("password");
} catch (ioexception ex) {
logger.getlogger(conn.class.getname()).log(level.severe, null, ex);
system.out.println(p.getproperty("driver"));
class.forname(this.driver);
conn = drivermanager.getconnection(this.url,this.username,this.password);
} catch (sqlexception ex) {
ex.printstacktrace();
system.out.print("获取连接异常");
} catch (classnotfoundexception ex) {
system.out.print("加载驱动出错");
ex.printstacktrace();;
return conn;
网上文章常见的几种读取.properties文件的方式
1、使用java.util.properties类的load()方法 示例:
inputstream in = lnew bufferedinputstream(new fileinputstream(name));
properties p = new properties();
p.load(in);
2、使用java.util.resourcebundle类的getbundle()方法
示例:
resourcebundle rb = resourcebundle.getbundle(name, locale.getdefault());
用resourcebundle读取.properties文件可避免路径问题
我在jar里读取.properties文件时,总是找不到文件路径,后来用resourcebundle读取.properties文件即可避免路径问题,代码如下:
//process为文件名,切记不要加 .properties, url是文件里的键名
resourcebundle bundle = resourcebundle.getbundle("com.ihandy.smsoc.app.process");
string s = bundle.getstring("url");
system.out.println(s);
purl = s;
3、使用java.util.propertyresourcebundle类的构造函数
inputstream in = new bufferedinputstream(new fileinputstream(name));
resourcebundle rb = new propertyresourcebundle(in);
4、使用class变量的getresourceasstream()方法
inputstream in = 类名.class.getresourceasstream(name);
p.load(in);
5、使用class.getclassloader()所得到的java.lang.classloader的getresourceasstream()方法 示例:
inputstream in = 类名.class.getclassloader().getresourceasstream(name);
6、使用java.lang.classloader类的getsystemresourceasstream()静态方法 示例:
inputstream in = classloader.getsystemresourceasstream(name);
7、servlet中可以使用javax.servlet.servletcontext的getresourceasstream()方法 示例:
inputstream in = context.getresourceasstream(path);