使用JAVA读写Properties属性文件

转载 2012年03月27日 18:22:56
Properties属性文件在JAVA应用程序中是经常可以看得见的,也是特别重要的一类文件。它用来配置应用程序的一些信息,不过这些信息一般都是比较少的数据,没有必要使用数据库文件来保存,而使用一般的文本文件来保存,如果是通过File直接保存的话,可能在存储和读取上都不是很方便,但如果保存为Properties文件就不一样了,属性文件都有键值对应的,在JAVA的包中,有提供专门的操作属性文件的类。这个类就是 java.uitl.Properties类,由于Properties类是一个集合类,所以,Properties会将属性以集合的方式读写。

注意:下面的代码中对于抛出的异常都未采取捕获的方式,自己在编写程序的时候一定要注意捕获异常,推荐将捕获的异常处理掉。

Properties类继承字Hashtable类,采用键值对应的存储方式,在使用Properties类管理属性文件时有什么方便的呢?Properties类有专门的读写方法来读写Properties属性文件,不用担心读写的格式问题,只要为Properties类提供一个读写流即可。Properties用于读写属性文件的方法分别是:
  
Java代码  收藏代码
  1. //读取属性文件流的方法   
  2.    public void load(InputStream inStream) throws IOException {}   
  3.    //写属性文件流的方法   
  4.    public void store(OutputStream out, String comments) throws IOException {}   

首先,我们来看看如何从一个属性文件中读取属性。

假定我们已经新建了一个属性文件,名为prop.properties,内容如下:

  
Java代码  收藏代码
  1. sitename=abcjava   
  2.    siteurl=www.abcjava.com   


我们要做的第一步就是要将文件读取到Properties类对象中,由于load有一个参数是InputStream,所以我们可以用 InputStream的子类FileInputStream将属性文件读取到Properties对象中,知道prop.properties的路径,我们就用FileInputStream(String name)构造函数:

  
Java代码  收藏代码
  1. Properties prop = new Properties();//属性集合对象   
  2.    FileInputStream fis = new FileInputStream("prop.properties");//属性文件流   
  3.    prop.load(fis);//将属性文件流装载到Properties对象中   




接下来我们将做的事情就是如果读取一个属性,因为属性文件中的每一行都是一个键值对应,所以每一行都代表了一个属性对象,每一行都将以键和值的关系存储到Properties中,Properties类提供了getProperty(String key)方法用来通过键名读取键值,当key在属性集合中找不到时又想为key在程序中赋予一个值时可以使用public String getProperty(String key, String defaultValue)方法,这个方法的意思就是用指定的键在属性列表中搜索属性。如果在属性列表中未找到该键,则接着递归检查默认属性列表及其默认值。如果未找到属性,则此方法返回默认值变量:

  
Java代码  收藏代码
  1. //获取属性值,sitename已在文件中定义   
  2.    System.out.println("获取属性值:sitename=" + prop.getProperty("sitename"));   
  3.    //获取属性值,country未在文件中定义,将在此程序中返回一个默认值,但并不修改属性文件   
  4.    System.out.println("获取属性值:country=" + prop.getProperty("country""中国"));   




在知道怎么读取属性文件之后我们还有一个很重要的事情就是要修改和添加新的属性到属性文件,这里就是使用public void store(OutputStream out, String comments)方法,这个方法是将属性集合写到一个OutputStream流中,同InputStream流一样,这里同样是使用其子类 FileOutputStream(String name),这里就不多说了。

在保存属性集合到文件之前,我们还有一件事情就是如何修改和添加新的属性到属性集合,这里使用了一个方法就是setProperty(String key, String value),这个方法就是当属性集合中存在指定的key时,就修改这个key的值,如果不存在,就新建一个key,同样是通过键值关系保存的,但值得注意的是,Properties类继承自Hashtable,所以也可以用Hashtable的put和putAll方法保存,但强烈反对使用这两个方法,因为它们允许调用方插入其键或值不是 Strings 的项。相反,应该使用 setProperty 方法。如果在“有危险”的 Properties 对象(即包含非 String 的键或值)上调用 store 或 save 方法,则该调用将失败。那好,下面我们就来看看修改、添加和保存属性的程序:

//修改sitename的属性值
prop.setProperty("sitename", "Boxcode");
//添加一个新的属性studio
prop.setProperty("studio", "Boxcode Studio");
//文件输出流
FileOutputStream fos = new FileOutputStream("prop.properties");
//将Properties集合保存到流中
prop.store(fos, "Copyright (c) Boxcode Studio");
fos.close();//关闭流



接下就是整个程序的源代码:

Java代码  收藏代码
  1. import java.io.FileInputStream;  
  2. import java.io.FileOutputStream;  
  3. import java.util.Properties;  
  4.   
  5. public class PropertyEditor {  
  6.     public static void main(String[] args) throws Exception {  
  7.         Properties prop = new Properties();// 属性集合对象  
  8.         FileInputStream fis = new FileInputStream("prop.properties");// 属性文件输入流  
  9.         prop.load(fis);// 将属性文件流装载到Properties对象中  
  10.         fis.close();// 关闭流  
  11.   
  12.         // 获取属性值,sitename已在文件中定义  
  13.         System.out.println("获取属性值:sitename=" + prop.getProperty("sitename"));  
  14.         // 获取属性值,country未在文件中定义,将在此程序中返回一个默认值,但并不修改属性文件  
  15.         System.out.println("获取属性值:country=" + prop.getProperty("country""中国"));  
  16.   
  17.         // 修改sitename的属性值  
  18.         prop.setProperty("sitename""Boxcode");  
  19.         // 添加一个新的属性studio  
  20.         prop.setProperty("studio""Boxcode Studio");  
  21.         // 文件输出流  
  22.         FileOutputStream fos = new FileOutputStream("prop.properties");  
  23.         // 将Properties集合保存到流中  
  24.         prop.store(fos, "Copyright (c) Boxcode Studio");  
  25.         fos.close();// 关闭流  
  26.     }  
  27. }  




在我们知道如何读写一个属性文件之后,我们仍然还有很多需要注意的问题,因为load和store方法都是按照ISO-8859-1的编码方式读写属性流文件的,而ILatin1 的字符和某些特殊字符,而对于非Latin1 的字符和某些特殊字符,则要使用与字符和字符串字面值所用的类似转义序列,以值和元素的形式来表示它们。所以当我们在处理中文时,不可以在直接修改属性文件时,将中文的值赋予给属性,而是要在JAVA程序中通过setProperty方法给属性赋予中文的值,因为这样store会将中文转换成 unicode码,在读取时系统会将读取到的unicode码按系统的编码打印出来,对于中文系统,通常是GBK码,这样中文才能够正常显示。
分享到:

【Java编程】写入、读取、遍历Properties文件

在Java开发中通常我们会存储配置参数信息到属性文件,这样的属性文件可以是拥有键值对的属性文件,也可以是XML文件,关于XML文件的操作,请参考博文【Java编程】DOM XML Parser 解析、...
  • a13429921973
  • a13429921973
  • 2014年05月09日 21:49
  • 15658

Java Properties文件读写设计

凡是中文乱码问题,都是字符读写的编码格式不统一的问题。 一般情况下,便于统一字符编码格式,所有文件读写格式均设为utf-8模式,这些地方包括数据库字符存储格式,源代码文件编码格式,资源文件编码格...
  • u013248535
  • u013248535
  • 2016年11月14日 21:21
  • 918

Java属性类:Properties的常用方法

Properties类本身是Hashtable类的子类,也是按照key-value的形式存放数据的. 设置和取得属性: public class PropertiesDemo01{ public s...
  • pengkv
  • pengkv
  • 2014年07月12日 15:39
  • 1626

Android开发笔记(八十四)使用Properties读写属性值

Properties概述 Java中的配置文件常为.properties文件,而Properties类便是读写此类文件的工具。属性文件有两种格式,一种是文本格式,其内容是“键=值”的形式,文本注释信息...
  • aqi00
  • aqi00
  • 2016年03月10日 15:10
  • 2673

使用C语言读取properties文件V1.0

本程序使用C语言读取类似以下格式的properties文件。 path = /etc/wgetrc launch_on_start = true 下一版目标: (1)使用指针代替二维数...
  • jediael_lu
  • jediael_lu
  • 2013年02月26日 12:37
  • 2488

Spring中属性文件properties的读取与使用

实际项目中,通常将一些可配置的定制信息放到属性文件中(如数据库连接信息,邮件发送配置信息等),便于统一配置管理。例中将需配置的属性信息放在属性文件/WEB-INF/configInfo.propert...
  • bnna8356586
  • bnna8356586
  • 2016年05月14日 15:53
  • 16249

实现对properties文件的有序读写

最近遇到一项需求,要求把properties文件中的内容读取出来供用户修改,修改完后需要再重新保存到properties文件中。很简单的需求吧,可问题是Properties是继承自HashTable的...
  • elim168
  • elim168
  • 2017年06月22日 10:41
  • 4339

java读取属性配置(properties)文件

文章开始,让我们先了解一下什么是属性配置文件(properties)。java的通用属性配置文件,以键值对方式存储信息。 还是给个图吧。上图的jdbc.properties 文件就是个属性配置文件。废...
  • u013410747
  • u013410747
  • 2015年10月12日 08:58
  • 1542

五种方式让你在java中读取properties文件内容不再是难题

一、背景   最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题。就借此机会把Spring+Spri...
  • liuningwcsdn
  • liuningwcsdn
  • 2017年05月17日 09:19
  • 655

Java读写Properties属性文件

Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。   一个属性列表可包含另一个属性列表作为它的“默认值”...
  • dos_186
  • dos_186
  • 2015年08月25日 15:20
  • 358
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用JAVA读写Properties属性文件
举报原因:
原因补充:

(最多只允许输入30个字)