Properties配置⽂件
⼀、properties⽂件
Properties⽂件是java中很常⽤的⼀种配置⽂件,⽂件后缀为“.properties”,属⽂本⽂件,⽂件的内容格式是“键=值”的格式,可以⽤“#”作为注
释,java编程中⽤到的地⽅很多,运⽤配置⽂件,可以便于java深层次的解耦。例如java应⽤通过JDBC连接数据库时,通常需要在代码中写数据库连接字符串,下⾯贴出java通过JDBC连接数据库的代码(以mysql为例):
String driver="sql.jdbc.Driver";//mysql提供的Driver接⼝的实现类
String jdbcUrl="jdbc:mysql:///user";//此处为"jdbc:mysql://localhost:3306/user"的简化形式,user为数据库名
String user="root";
String password="451535";
Class.forName(driver);//通过反射动态实例化mysql数据库驱动类
Connection conn= Connection(jdbcUrl,user,password);
1234567
以上代码连接mysql数据库没有任何问题,但是我想换成Oracle数据库,问题就来了,不是不能改,⽽是我必须得到java源代码中修改代码,这样的硬代码耦合在java中⼀般不这么做(菜鸟程序员有可能)。所以,为了达到解耦的⽬的,我们可以⽤配置⽂件来储存数据库的连接字符串。下⾯贴⼀份保存数据库连接字符串的properties配置⽂件 jdbc.properties:
sql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/user
user=root
password=451535
这样我们就可以通过加载properties配置⽂件来连接数据库,达到深层次的解耦⽬的,如果想要换成oracle或是DB2,我们只需要修改配置⽂件即可,不⽤修改任何代码就可以更换数据库。
⼆、Properties类
java中提供了配置⽂件的操作类Properties类(java.util.Properties):
public class Properties extends Hashtable.可见Properties类继承了Hashtable,⽽HashTable⼜实现了Map接⼝,所以可对 Properties 对象应⽤put 和 putAll ⽅法。但不建议使⽤这两个⽅法,因为它们允许调⽤者插⼊其键或值不是 String 的项。相反,应该使⽤ setProperty ⽅法。如果在“不安全”的 Properties 对象(即包含⾮ String 的键或值)上调⽤ store 或 save ⽅法,则该调⽤将失败。
Properties的常⽤⽅法:
1.setProperty(String key, String value)
调⽤ Hashtable 的⽅法 put。
2.
getProperty(String key)
⽤指定的键在此属性列表中搜索属性
3.
getProperty(String key, String defaultValue)
⽤指定的键在属性列表中搜索属性。
4.
load(InputStream inStream)
从输⼊流中读取属性列表(键和元素对)。
5.
load(Reader reader)
按简单的⾯向⾏的格式从输⼊字符流中读取属性列表(键和元素对)。
6.
loadFromXML(InputStream in)
将指定输⼊流中由 XML ⽂档所表⽰的所有属性加载到此属性表中。
7.store(OutputStream out, String comments)
以适合使⽤ load(InputStream) ⽅法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写⼊输出流。
8.store(Writer writer, String comments)宁德中考成绩查询
以适合使⽤ load(Reader) ⽅法的格式,将此 Properties 表中的属性列表(键和元素对)写⼊输出字符。
9.storeToXML(OutputStream os, String comment)
发出⼀个表⽰此表中包含的所有属性的 XML ⽂档。
10.storeToXML(OutputStream os, String comment, String encoding)
使⽤指定的编码发出⼀个表⽰此表中包含的所有属性的 XML ⽂档。
下⾯通过代码的形式了解Properties的具体⽤法(通过JUnit单元测试的形式运⾏代码):
*1.为properties对象添加属性和获取值*
@Test
public void setAndGetProperty() {
Properties pro=new Properties();
//设置值
pro.setProperty("driver", "sql.jdbc.Driver");
pro.setProperty("url", "jdbc:mysql///user");
pro.setProperty("user", "root");
pro.setProperty("password", "451535");
//获取值:
//1、getProperty(String key)⽅法通过键获取值
String str= Property("driver");
System.out.println(str);
//2、getProperty(String key, String defaultValue)重载⽅法
//当properties对象中没有所指定的键值时,显⽰给定的默认值
String Property("driver", "没有该值");
String Property("haha", "没有该值");
System.out.println(str2);
System.out.println(str3);
}
123456789101112131415161718192021
运⾏结果:
选墓地
没有该值
*2.以properties配置⽂件格式写⼊到硬盘中的某个⽂件夹(本例写⼊到D盘的others⽂件夹中):* @Test
public void storePropertiesToHardFile() throws FileNotFoundException, IOException{
Properties pro=new Properties();
pro.setProperty("driver", "sql.jdbc.Driver");
pro.setProperty("url", "jdbc:mysql///user");
pro.setProperty("user", "root");
pro.setProperty("password", "451535");
//1.通过字节流的形式
//store(OutputStream out, String comments)
//outputStream:字节输出流 comments:配置⽂件说明
pro.store(new FileOutputStream(new File("d:/others/jdbc.properties")), "数据库配置⽂件");
//2.通过字符流的形式
//store(Writer writer, String comments)
//writer:字符输出流 comments:配置⽂件说明
pro.store(new FileWriter("d:/others/jdbc.properties"), "数据库配置⽂件");
}
123456789101112131415161718
运⾏后效果:
*3.以XML配置⽂件格式写⼊到硬盘中的某个⽂件夹(本例写⼊到D盘的others⽂件夹中):*
美国节假日@Test
public void storeXMLToHardFile() throws FileNotFoundException, IOException{
Properties pro=new Properties();
pro.setProperty("driver", "sql.jdbc.Driver");
pro.setProperty("url", "jdbc:mysql///user");
pro.setProperty("user", "root");
pro.setProperty("password", "451535");
//1.不指定编码默认为:UTF-8
//storeToXML(OutputStream os, String comment)
//因为XML不是⽂本⽂件,所以只能⽤字节流,为不能⽤字符流
pro.storeToXML(new FileOutputStream("d:/l"), "数据库配置⽂件");
//1.不指定编码
//storeToXML(OutputStream os, String comment)
//因为XML不是⽂本⽂件,所以只能⽤字节流,为不能⽤字符流
pro.storeToXML(new FileOutputStream("d:/l"), "数据库配置⽂件", "GBK");
}
123456789101112131415161718
运⾏后效果:
*4.以properties和XML配置⽂件格式写⼊到应⽤程序的某个⽂件夹(本例写⼊应⽤程序的classPath类路径下):* public void storeToClassPsth() throws FileNotFoundException, IOException{
Properties pro=new Properties();
pro.setProperty("driver", "sql.jdbc.Driver");
pro.setProperty("url", "jdbc:mysql///user");
pro.setProperty("user", "root");
pro.setProperty("password", "451535");
pro.store(new FileOutputStream("src/jdbc.properties"), "数据库配置⽂件");
pro.storeToXML(new FileOutputStream("l") , "数据库配置⽂件");
}
12345678910
运⾏后效果:
5.加载和读取配置⽂件(以properties⽂件为例)
public void loadAndReadFile() throws FileNotFoundException, IOException{
Properties pro=new Properties();
//通过字节输⼊流
//load(InputStream inStream)
pro.load(new FileInputStream("src/sql.properties"));
//通过类加载器获取当前类路径
//类路径是指 / bin路径
pro.Class().getResourceAsStream("/sql.properties"));
pro.Class().getClassLoader().getResourceAsStream("sql.properties"));
//也可以使⽤当前上下⽂的类加载器,不⽤“/”
pro.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("sql.properties")); //通过字符输⼊流
//load(Reader reader)
pro.load(new FileReader("src/jdbc.properties"));
System.out.("driver"));
收集阳光作文//以上⼏种加载配置⽂件的⽅法都可以使⽤,此处都列举出来。
}
12345678910111213141516171819
运⾏结果:
给不了的幸福 谢娜6.附上通过读取配置⽂件JDBC连接数据库的代码⼲货:
public Connection getConnection() throws Exception{
Properties info=new Properties();在itunes下载完怎么安装
info.Class().getClassLoader().getResourceAsStream("jdbc.properties"));
String Property("driver");
String Property("jdbcUrl");
String Property("user");
String password=info .getProperty("password");
Class.forName(driver);
Connection Connection(jdbcUrl,user,password);
return connection;
}
123456789101112
Java读取Properties⽂件:
Java读取Properties⽂件的⽅法有很多,详见: Java读取Properties⽂件的六种⽅法
但是最常⽤的还是通过java.lang.Class类的getResourceAsStream(String name)⽅法来实现,如下可以这样调⽤:
InputStream in = getClass().getResourceAsStream("资源Name");作为我们写程序的,⽤
此⼀种⾜够。
或者下⾯这种也常⽤:
InputStream in = new BufferedInputStream(new FileInputStream(filepath));
三、实例:
根据key读取value
读取properties的全部信息
写⼊新的properties信息
//关于Properties类常⽤的操作
public class TestProperties {
//根据Key读取Value
public static String GetValueByKey(String filePath, String key) {
Properties pps = new Properties();
try {
InputStream in = new BufferedInputStream (new FileInputStream(filePath));
pps.load(in);
String value = Property(key);
System.out.println(key + " = " + value);
return value;
}catch (IOException e) {
e.printStackTrace();
return null;
}
}
//读取Properties的全部信息
public static void GetAllProperties(String filePath) throws IOException {
Properties pps = new Properties();
InputStream in = new BufferedInputStream(new FileInputStream(filePath));
pps.load(in);
Enumeration en = pps.propertyNames(); //得到配置⽂件的名字
while(en.hasMoreElements()) {
String strKey = (String) en.nextElement();
String strValue = Property(strKey);
System.out.println(strKey + "=" + strValue);
}
}
//写⼊Properties信息
public static void WriteProperties (String filePath, String pKey, String pValue) throws IOException {
Properties pps = new Properties();
InputStream in = new FileInputStream(filePath);
//从输⼊流中读取属性列表(键和元素对)
pps.load(in);
//调⽤ Hashtable 的⽅法 put。使⽤ getProperty ⽅法提供并⾏性。
/
/强制要求为属性的键和值使⽤字符串。返回值是 Hashtable 调⽤ put 的结果。
OutputStream out = new FileOutputStream(filePath);
pps.setProperty(pKey, pValue);
//以适合使⽤ load ⽅法加载到 Properties 表中的格式,
//将此 Properties 表中的属性列表(键和元素对)写⼊输出流
pps.store(out, "Update " + pKey + " name");
}
public static void main(String [] args) throws IOException{
//String value = GetValueByKey("Test.properties", "name");
//System.out.println(value);
//GetAllProperties("Test.properties");
WriteProperties("Test.properties","long", "212");
}
}
结果:
Test.properties中⽂件的数据为:
Update long name
Sun Feb 23 18:17:16 CST 2014
name=JJ
Weight=4444
long=212
Height=3333
总结:通过读取配置⽂件的形式可以实现代码的深层次解耦,在java编程中,配置⽂件的重要性更是不⾔⽽喻。java编程有⼀条不成⽂的规定就是:“约定⼤于配置,配置⼤于代码”意思就是能⽤约定的就不去配置,能⽤配置⽂件搞定的就不去写代码,真正⽜逼的攻城狮(⼯程师)不是写代码,⽽是写配置。java的⼀些开源框架,如:Struts、Struts2、Hibernate、Spring、MyBatis等都⼤量的使⽤配置⽂件,我们在学习和⼯作中,都应该将“约定⼤于配置,配置⼤于代码”的思想运⽤到项⽬中,实现代码的解耦,体现出你⽐别⼈的⾼明之处,才能⽐别⼈优秀。
转载⾃
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论