Java中的Properties类
在这一篇文章中提到了Java如何连接Oracle数据库,Java如何连接Oracle数据库
其中下图所展示的四个字符串,一个是驱动注册获取实例化对象的路径,另外三个是获取连接对象时需要的url和账号密码。如果我也是使用这个类来连接MySQL数据库的话,就要对其代码进行修改,当代码一多可能会很难找到,对其操作不便。
并且,如果仍然使用连接Oracle修改了账号密码,似乎对其修改也表现出其不灵活。这个时候就可以用Properties类将下面的四个字符串写入打配置文件中,在配置文件进行修改反而更加清晰可见。
首先我们创建一个MyProperties.properties文件,与一般的.txt文本文件不同在于就是后缀名的不一样。 这样的话其实就用用到流来进行文件的读入读出。
配置文件里的内容其实跟Map也非常相像,用 key = value 的格式来表示一行数据。一个key对应一个value .我们可以通过Key键来获取到value值。
1. 写入配置文件
写入配置文件,可以在.properties后缀文件里手动写入,注意格式就可。下面介绍如何通过代码实现。
首先我们创建一个Properties类的对象,使用setProperties(String key , String value)方法,来设置配置文件,类似与Map类中的put();
按照上述的内容进行key和value一一对应的写入到Properties对象中。
Properties properties = new Properties();
properties.setProperty("driver_name","oracle.jdbc.driver.OracleDriver");
properties.setProperty("url","jdbc:oracle:thin:@oracle:1521:orcl");
properties.setProperty("user","scott" );
properties.setProperty("password", "1234");
设置好Properties对象的内容后,就可以写入到MyProperties.properties了,用到的是Properties类中store()方法; 将Properties对象输出到MyProperties.properties。可以使用字节输出流OutputStream,字符输出流Writer。 其输出流对象的文件路径就是配置文件的路径
void store(OutputStream out , String comments);
void store(Writer writer , String comments )
其中comments就是可以写在配置文件里的注释。
//使用字符流输出流 将Properties对象写入到MyProperties.properties中
FileWriter writer = new FileWriter("MyProperties.properties");
properties.store(writer, "Oracle");
writer.close();
//使用字节流输出流 将Properties对象写入到MyProperties.properties中
FileOutputStream out = new FileOutputStream("MyProperties.properties");
properties.store(out,"Oracle");
out.close();
现在配置文件就写入成功了
2.读入配置文件
读入文件自然用到的是输入流。使用字节输入流和字符输入流都行。 然后使用load()方法加载到Properties对象中就可以了。下面以字节输入流为例。
void load(InputStream in);
void load(Reader read);
InputStream in = new FileInputStream("MyProperties.properties");
Properties properties = new Properties();
properties.load(in);
这个时候配置文件就读入到Properties对象中了,既然设置配置文件内容是setProperty(),那么获取配置文件内容无非就是getProperty(String key)方法了。这个是需要通过键来获取到值。
根据上述读入的配置文件获取需要的键值对。
System.out.println("driver_name="+properties.getProperty("driver_name"));
System.out.println("url="+properties.getProperty("url"));
System.out.println("user="+properties.getProperty("user"));
System.out.println("password="+properties.getProperty("password"));
输出结果就是这样。
上述是因为知道键的值是多少,那假如我不知道Properties对象里的键是什么呢? 我们就可以用到Properties类中的stringPropertyNames()方法,得到所有键的字符串集合。在通过getProperty()来获取值。
那我们就可以这样
public static void inputProperties(Properties p) {
//返回Properties对象的Key集合 ,
for(String e:p.stringPropertyNames()) {
System.out.println(e +" = "+p.getProperty(e));
}
}
调用这个方法就得到了配置文件的所有键值对内容。
另外除了用流的方法来获取配置文件的信息,当配置文件路径在src下时,就可以使用util包的ResourceBundle类来快速获取配置文件信息。
下面的MyProperties.properties文件在src下的Resource包下
通过已知键输出配置文件信息:
ResourceBundle bundle = ResourceBundle.getBundle("Resource/MyProperties");
String driver_name = bundle.getString("driver_name");
String url = bundle.getString("url");
String user = bundle.getString("user");
String password = bundle.getString("password");
System.out.println("driver_name = "+driver_name);
System.out.println("url = "+url);
System.out.println("user = "+user);
System.out.println("password = "+password);
通过未知键输出配置文件信息:
跟上述流操作类似,无非就是获取配置文件的所有键集合,然后遍历。通过键的值去获取到对应的值。
ResourceBundle bundle = ResourceBundle.getBundle("Resource/MyProperties");
//获取到配置文件的所有键集合。
for(String s:bundle.keySet()) {
System.out.println(s+"="+bundle.getString(s));
}
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。