java获取properties属性文件示例
一个属性列表可包含另一个属性列表作为它的“默认值”;如果未能在原有的属性列表中搜索到属性键,则搜索第二个属性列表。
因为Properties继承于Hashtable,所以可对Properties对象应用put和putAll方法。但不建议使用这两个方法,因为它们允许调用者插入其键或值不是String的项。相反,应该使用setProperty方法。如果在“不安全”的Properties对象(即包含非String的键或值)上调用store或save方法,则该调用将失败。类似地,如果在“不安全”的Properties对象(即包含非String的键)上调用propertyNames或list方法,则该调用将失败。
Properties属性文件在JAVA应用程序中是经常可以看得见的,也是特别重要的一类文件。它用来配置应用程序的一些信息,不过这些信息一般都是比较少的数据,没有必要使用数据库文件来保存,而使用一般的文本文件来保存,如果是通过File直接保存的话,可能在存储和读取上都不是很方便,但如果保存为Properties文件就不一样了,属性文件都有键值对应的,在JAVA的包中,有提供专门的操作属性文件的类。这个类就是java.uitl.Properties类,由于Properties类是一个集合类,所以,Properties会将属性以集合的方式读写。
注意:下面的代码中对于抛出的异常都未采取捕获的方式,自己在编写程序的时候一定要注意捕获异常,推荐将捕获的异常处理掉。
Properties类继承字Hashtable类,采用键值对应的存储方式,在使用Properties类管理属性文件时有什么方便的呢?Properties类有专门的读写方法来读写Properties属性文件,不用担心读写的格式问题,只要为Properties类提供一个读写流即可。Properties用于读写属性文件的方法分别是:
//读取属性文件流的方法
publicvoidload(InputStreaminStream)throwsIOException{}
//写属性文件流的方法
publicvoidstore(OutputStreamout,Stringcomments)throwsIOException{}
首先,我们来看看如何从一个属性文件中读取属性。
假定我们已经新建了一个属性文件,名为prop.properties,内容如下:
sitename=abcjava
siteurl=www.abcjava.com
我们要做的第一步就是要将文件读取到Properties类对象中,由于load有一个参数是InputStream,所以我们可以用InputStream的子类FileInputStream将属性文件读取到Properties对象中,知道prop.properties的路径,我们就用FileInputStream(Stringname)构造函数:
在知道怎么读取属性文件之后我们还有一个很重要的事情就是要修改和添加新的属性到属性文件,这里就是使用publicvoidstore(OutputStreamout,Stringcomments)方法,这个方法是将属性集合写到一个OutputStream流中,同InputStream流一样,这里同样是使用其子类FileOutputStream(Stringname),这里就不多说了。 在保存属性集合到文件之前,我们还有一件事情就是如何修改和添加新的属性到属性集合,这里使用了一个方法就是setProperty(Stringkey,Stringvalue),这个方法就是当属性集合中存在指定的key时,就修改这个key的值,如果不存在,就新建一个key,同样是通过键值关系保存的,但值得注意的是,Properties类继承自Hashtable,所以也可以用Hashtable的put和putAll方法保存,但强烈反对使用这两个方法,因为它们允许调用方插入其键或值不是Strings的项。相反,应该使用setProperty方法。如果在“有危险”的Properties对象(即包含非String的键或值)上调用store或save方法,则该调用将失败。那好,下面我们就来看看修改、添加和保存属性的程序: 接下就是整个程序的源代码: importjava.io.FileInputStream;
Propertiesprop=newProperties();//属性集合对象
FileInputStreamfis=newFileInputStream("prop.properties");//属性文件流
prop.load(fis);//将属性文件流装载到Properties对象中
//修改sitename的属性值
prop.setProperty("sitename","Boxcode");
//添加一个新的属性studio
prop.setProperty("studio","BoxcodeStudio");
//文件输出流
FileOutputStreamfos=newFileOutputStream("prop.properties");
//将Properties集合保存到流中
prop.store(fos,"Copyright(c)BoxcodeStudio");
fos.close();//关闭流
importjava.io.FileOutputStream;
importjava.util.Properties;
publicclassPropertyEditor{
publicstaticvoidmain(String[]args)throwsException{
Propertiesprop=newProperties();//属性集合对象
FileInputStreamfis=newFileInputStream("prop.properties");//属性文件输入流
prop.load(fis);//将属性文件流装载到Properties对象中
fis.close();//关闭流
//获取属性值,sitename已在文件中定义
System.out.println("获取属性值:sitename="+prop.getProperty("sitename"));
//获取属性值,country未在文件中定义,将在此程序中返回一个默认值,但并不修改属性文件
System.out.println("获取属性值:country="+prop.getProperty("country","中国"));
//修改sitename的属性值
prop.setProperty("sitename","Boxcode");
//添加一个新的属性studio
prop.setProperty("studio","BoxcodeStudio");
//文件输出流
FileOutputStreamfos=newFileOutputStream("prop.properties");
//将Properties集合保存到流中
prop.store(fos,"Copyright(c)BoxcodeStudio");
fos.close();//关闭流
}
}相关文章