package com.gzqh.bbs.properties;
import java.io.*;
import java.util.Enumeration;
import java.util.Properties;
import java.util.PropertyResourceBundle;
public class PropertiesLoader {
/**
* 读取属性文件的名称
* 最传统的方式
* 根据资源文件的名称,找到文件后,进行解析,装到Properties对象中,返回
* @param fileName java.util.Properties返回键值对的
* @return第一种方法
*/
//资源绑定,这种方式,把资源文件(command.properties)当成是一个java类文件来处理
//1.编译这个文件,系统自动拷贝这个文件到class
//2.所以这个文件在传递进行解析的时候,无需加后缀名字(properties)
public java.util.Properties getPropertiesMethod1(String fileName)
throws java.io.FileNotFoundException{
//创建一个key\valueProperties类型的对象集合(Map接口的类,父类是Hashtable)
Properties properties=new Properties();
//资源绑定,JDK已经很早就提供了一个资源绑定类
PropertyResourceBundle resourceBundle=null;
resourceBundle=(PropertyResourceBundle)PropertyResourceBundle.getBundle(fileName);
//要打开数据,讲数据放到properties对象中去
//因为是JDK1.1就有的类,所以使用的还是枚举
Enumeration enu=resourceBundle.getKeys();
properties=new Properties();
while(enu.hasMoreElements()){
//获取当前的key的值
String propertyName=enu.nextElement().toString();
//将资源绑定中的信息,取出来再次进行绑定
properties.setProperty(propertyName, resourceBundle.getString(propertyName));
}
return properties;
}
//测试第一种方法
public void test1(PropertiesLoader p){
String fileName="Command";
//resourceBundle来读取的,这种是可以不用写.properties后缀的,并且db.properties文件,我们可以
//当成一个java文件来看待,这个文件可以自动拷贝到java的class文件相对应的class文件相对应的目录下
Properties properties;
try {
properties=p.getPropertiesMethod1(fileName);
Enumeration enu=properties.keys();
while(enu.hasMoreElements()){
System.out.println(properties.getProperty(enu.nextElement().toString()));
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
PropertiesLoader p=new PropertiesLoader();
// p.test1(p);
p.test2(p);
// p.test4(p);
}
/**
* 第二种方法
* 文件需要放在工程根目录下面
* 文件需要后缀名
*/
//当成文件来处理,java.io.* 专门处理文件流
public Properties getPropertiesMethod2(String propertiesName){
Properties p=new Properties();
try {
//输入缓冲流
InputStream in=new BufferedInputStream(new FileInputStream(propertiesName));
p.load(in);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return p;
}
//测试第二种方法
public void test2(PropertiesLoader p){
String fileName="Command.properties";
Properties properties;
properties=p.getPropertiesMethod2(fileName);
System.out.println(properties.getProperty("login"));
}
/**
* 第四种方法
* 只会搜索本目录,所以必须放在同一包里
*/
public java.util.Properties getPropertiesMethod4(String fileName){
InputStream in=this.getClass().getResourceAsStream(fileName);
Properties p=new Properties();
try {
p.load(in);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return p;
}
public void test4(PropertiesLoader p){
String fileName="Command.properties";
Properties properties;
properties=p.getPropertiesMethod4(fileName);
System.out.println(properties.getProperty("login"));
}
}