java获取properties属性文件示例

 更新时间:2014年01月03日 11:28:46   作者:  
Properties类表示了一个持久的属性集。Properties可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。本文使用java读取这些属性,看下面详细介绍吧

一个属性列表可包含另一个属性列表作为它的“默认值”;如果未能在原有的属性列表中搜索到属性键,则搜索第二个属性列表。

因为 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用于读写属性文件的方法分别是:

复制代码 代码如下:

//读取属性文件流的方法

public void load(InputStream inStream) throws IOException {}

//写属性文件流的方法

public void store(OutputStream out, String comments) throws IOException {}

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

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

复制代码 代码如下:

sitename=abcjava

siteurl=www.abcjava.com

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

复制代码 代码如下:

Properties prop = new Properties();//属性集合对象

FileInputStream fis = new FileInputStream("prop.properties");//属性文件流

prop.load(fis);//将属性文件流装载到Properties对象中

在知道怎么读取属性文件之后我们还有一个很重要的事情就是要修改和添加新的属性到属性文件,这里就是使用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();//关闭流

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

复制代码 代码如下:

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.util.Properties;

public class PropertyEditor {

public static void main(String[] args) throws Exception {

Properties prop = new Properties();// 属性集合对象

FileInputStream fis = new FileInputStream("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", "Boxcode Studio");

// 文件输出流

FileOutputStream fos = new FileOutputStream("prop.properties");

// 将Properties集合保存到流中

prop.store(fos, "Copyright (c) Boxcode Studio");

fos.close();// 关闭流


}

相关文章

  • Java虚拟机内存溢出与内存泄漏

    Java虚拟机内存溢出与内存泄漏

    这篇文章主要介绍了Java虚拟机内存溢出与内存泄漏,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Java Swing实现扫雷小游戏

    Java Swing实现扫雷小游戏

    这篇文章主要为大家详细介绍了Java Swing实现扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Mybatis-plus批量去重插入ON DUPLICATE key update使用方式

    Mybatis-plus批量去重插入ON DUPLICATE key update使用方式

    这篇文章主要介绍了Mybatis-plus批量去重插入ON DUPLICATE key update使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 浅析java 循序与二元搜索算法

    浅析java 循序与二元搜索算法

    这篇文章主要简单介绍了java 循序与二元搜索算法,需要的朋友可以参考下
    2015-02-02
  • java 非对称加密算法DH实现详解

    java 非对称加密算法DH实现详解

    这篇文章主要介绍了java 非对称加密算法DH实现详解 ,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • spring中时间格式化的两种方法示例讲解

    spring中时间格式化的两种方法示例讲解

    这篇文章主要介绍了spring中时间格式化的两种方法,方法一自己格式化,方法二通过配置,结合实例代码讲解的非常详细,文中补充介绍了Spring项目中时间格式化的方法,需要的朋友可以参考下
    2023-08-08
  • Java中的命名与目录接口JNDI基本操作方法概览

    Java中的命名与目录接口JNDI基本操作方法概览

    这篇文章主要介绍了Java中的命名与目录接口JNDI基本操作方法概览,JNDI提供统一的客户端API使得Java应用程序可以和这些命名服务和目录服务之间进行交互,需要的朋友可以参考下
    2016-03-03
  • Java中的三种校验注解的使用(@Valid,@Validated和@PathVariable)

    Java中的三种校验注解的使用(@Valid,@Validated和@PathVariable)

    本文主要介绍了Java中的三种校验注解的使用(@Valid,@Validated和@PathVariable),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • SpringBoot自定义Redis实现缓存序列化详解

    SpringBoot自定义Redis实现缓存序列化详解

    Spring提供了一个RedisTemplate来进行对Redis的操作,但是RedisTemplate默认配置的是使用Java本机序列化。如果要对对象操作,就不是那么的方便。所以本文为大家介绍了另一种SpringBoot结合Redis实现序列化的方法,需要的可以参考一下
    2022-07-07
  • 关于SpringBoot中Ajax跨域以及Cookie无法获取丢失问题

    关于SpringBoot中Ajax跨域以及Cookie无法获取丢失问题

    这篇文章主要介绍了关于SpringBoot中Ajax跨域以及Cookie无法获取丢失问题,本文具有参考意义,遇到相同或者类似问题的小伙伴希望可以从中找到灵感
    2023-03-03

最新评论