一、认识properties文件
java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties;
1、properties文件是一个文本文件
2、properties文件的语法有两种,一种是注释,一种属性配置。
注 释:前面加上#号
属性配置:以“键=值”的方式书写一个属性的配置信息。
3、properties文件的一个属性配置信息值可以换行,但键不可以换行。值换行用“\”表示。
4、properties的属性配置键值前后的空格在解析时候会被忽略。
5、properties文件可以只有键而没有值。也可以仅有键和等号而没有值,但无论如何一个属性配置不能没有键。
二、解读java.util.Properties类
1、Properties类的层次结构
java.lang.Object
java.util.Dictionary<K,V>
java.util.Hashtable<Object,Object>
java.util.Properties
从层次机构看,Properties类实现了Map接口,因为HashTable实现了Map接口,因此Properties类本质上是一种简单的Map容器。实际上,Properties类本身表示了对一种Map结构的操作。properties文件本身就表示了一个“键值对”的集合。因此,Properties类属于集合容器的家族,在使用前应该创建一个Properties的容器,实际上就是创建一个默认不带参数的Properties对象。以后通过别的方式给里面添加“键值对”。
2、properties文件与Properties类的关系
通过properties文件可以填充Properties类,也可以通过xml文件来填充Properties类,还可以通过绝对路径方式加载Properties文件信息,也可以使用相对路径加载。
三、
操作properties文件的java方法
新建一个file.properties文件,内容为:
#这是使用UTF-8编码保存的
username=张三
mypassword=12345
test=123abc会乱码吗?
新建一个ResourceBundletest
类,内容为:
import java.util.ResourceBundle;
public class ResourceBundleTest {
public static void main(String[] args){
ResourceBundle rb = ResourceBundle.getBundle("dgltwy.com.cn.file"); //我的文件路径:"/dgltwy/com/cn/file.properties"
String str = (String)rb.getObject("username");
try {
str = new String(str.getBytes("ISO8859-1"), "UTF-8"); //将username进行了编码转换
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(str);
System.out.println(rb.getObject("mypassword"));
System.out.println(rb.getObject("test")); //没有进行编码转换的中文会乱码
}
}
输出结果:
张三
12345
123abc?????±?????????
利用静态快,方便数据库连接的更改(即项目发布后只需更改properties文件)
1.编写数据库连接类DataBaseManage,代码如下:
package dgltwy.com.cn.business.comm;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.ResourceBundle;
public class DataBaseManage {
Connection conn=null;
// String driver = "oracle.jdbc.driver.OracleDriver";
// String url="jdbc:oracle:thin:@localhost:1521:orcl";
// String username = "yylg";
// String password = "12345";
private static String driver = null;
private static String url= null;
private static String username = null;
private static String password = null;
static {
ResourceBundle rb = ResourceBundle.getBundle("dbDate"); //文件所在路径,不用写后缀,我的是在"/src/dbDate.properties";
driver = String.valueOf(rb.getObject("driver"));
url = String.valueOf(rb.getObject("url"));
username = String.valueOf(rb.getObject("username"));
password = String.valueOf(rb.getObject("password"));
System.out.println("用户和密码 : "+username+" ; "+password);
}
public Connection getConnection() throws Exception{
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, username, password);
System.out.println("数据库连接成功..");
} catch (ClassNotFoundException ex) {
System.out.println("数据库连接失败!");
ex.printStackTrace();
throw ex;
}
return conn;
}
public static void main(String []args) throws Exception{
Connection conn = new DataBaseManage().getConnection();
System.out.println("conn = "+conn);
}
}
编写 properties文件dbDate. properties,内容为:
#配置JDBC的参数(有中文的话注意编码问题)
driver = oracle.jdbc.driver.OracleDriver
url = jdbc:oracle:thin:@localhost:1521:orcl
username = yylg
password =12345
执行类文件得到结果:
用户和密码 : yylg ; 12345
数据库连接成功..
conn = oracle.jdbc.driver.T4CConnection@10c832d2
参考博客:http://trans.blog.51cto.com/503170/110227/ 及:http://www.cnblogs.com/panjun-Donet/archive/2009/07/17/1525597.html