1、Properties类

Properties类表示了一个持久的属性集。Properties可保存在流中或从流中加载,属性列表中的key和value必须是字符串。

虽然Properties类继承了java.util.Hashtable,可以使用Hashtable的put等方法,但是这些方法允许使用非string类型的数据,将导致不安全的行为,所以还是应该使用setProperty 方法。

2、主要方法

load(InputStream in)  从输入流读取属性列表

getProperties(String key)  获取指定key的值,返回string

setProperty(String key, String value)  设置或修改属性的值

store(OutputStream out, String comments)  将properties对象写入一个输出流,comments为注释,comments为空则不加注释

下面进行代码演示

 /*初始配置文件
aa=1
bb=2
cc=3
*/ Properties prop = new Properties(); //创建Properties对象
InputStream in = null;
FileOutputStream oFile = null;
try {
in = new FileInputStream("filePath"); //创建输入流文件对象
prop.load(in); //加载输入流
System.out.println("aa=" + prop.getProperty("aa")); //aa=1
prop.setProperty("aa", "11"); //修改"aa"的值
oFile = new FileOutputStream("filePath"); //创建输出流文件对象
prop.store(oFile, ""); //将Properties对象的属性保存到输出流指定文件
} catch (IOException e) {
log.error(e);
} finally {
try {
oFile.close(); //关闭输出流
} catch (IOException e) {
log.error(e);
}
try {
in.close(); //关闭输入流
} catch (IOException e) {
log.error(e);
}
}

最后的关闭IO流很重要,一定要放在finally代码块中执行。

3、修改properties配置文件时遇到的一些问题

读取配置文件一般不会出什么问题,修改和写入的时候稍微复杂一点,把遇到的问题记录一下

3.1 配置FileOutputStream的第二个参数true,导致配置文件末尾重复追加配置项

FileOutputStream构造函数

FileOutputStream(String name, boolean append)

append代表是否向文件末尾追加字符流的形式写入文件,默认为false,即重新写入配置

此处的输出流配置第二个参数为true会导致不停的在配置文件末尾追加重复的配置,导致输出流指定的文件越来越大。所以最好不加这个参数

 /*初始配置文件
aa=1
bb=2
cc=3
*/ Properties prop = new Properties();
InputStream in = new FileInputStream("filePath");
prop.load(in);
prop.setProperty("aa", "11");
FileOutputStream oFile = new FileOutputStream("filePath", true);
prop.store(oFile, ""); /*执行后配置文件
aa=1
bb=2
cc=3 aa=11
bb=2
cc=3
*/
3.2 FileOutputStream创建位置导致诡异事情

主要是与setProperty()方法的相对位置

正常是先setProperty()设置属性,然后创建FileOutputStream对象

 /*初始配置文件
aa=1
bb=2
cc=3
*/ //正常写法
InputStream in = new FileInputStream("filePath");
prop.load(in);
prop.setProperty("aa", "11");
FileOutputStream oFile = new FileOutputStream("filePath");
prop.store(oFile, ""); //问题写法
InputStream in = new FileInputStream("filePath");
FileOutputStream oFile = new FileOutputStream("filePath"); //提前创建
prop.load(in);
prop.setProperty("aa", "11");
prop.store(oFile, ""); /*正常执行后的配置文件
aa=11
bb=2
cc=3
*/ /*问题执行后的配置文件
aa=11
*/

如果反过来,会导致除setProperty()修改的属性,其它都会丢失。

没想明白这是为什么,有人明白可以指点一下。

3.3 读取和修改properties文件后改变文件内容顺序

使用jdk提供的Properties类读取和修改配置文件后,加载到内存中的顺序是随机的,不能保证和原文件的顺序一致,因此需要重写Properties类,实现顺序读取properties属性。

java读写properties配置文件方法的更多相关文章

  1. 【转】Java 读写Properties配置文件

    [转]Java 读写Properties配置文件 1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形 ...

  2. Java 读写Properties配置文件

    Java 读写Properties配置文件 JAVA操作properties文件 1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了M ...

  3. (转)Java 读写Properties配置文件

    原文:http://www.cnblogs.com/xudong-bupt/p/3758136.html 1.Properties类与Properties配置文件 Properties类继承自Hash ...

  4. Java 读写Properties配置文件【转】

    1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集.不过Properties有特殊的地 ...

  5. java读取properties配置文件方法(一)

    为了修改项目参数方便,需要使用properties配置文件: 首先是需要三个jar包(不同的jar包,读取配置文件的方式会有所不同,这里使用的是2.6版本的jar包) commons configur ...

  6. java读写properties配置文件不改变属性的顺序和注释

    先贴代码 import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java ...

  7. Java 读写Properties配置文件(转)

    转自:http://www.cnblogs.com/xudong-bupt/p/3758136.html

  8. java 顺序 读写 Properties 配置文件

    java 顺序 读写 Properties 配置文件 支持中文 不乱码 java 顺序 读写 Properties 配置文件 ,java默认提供的Properties API 继承hashmap ,不 ...

  9. java 顺序 读写 Properties 配置文件 支持中文 不乱码

    java 顺序 读写 Properties 配置文件 ,java默认提供的Properties API 继承hashmap ,不是顺序读写的. 特从网上查资料,顺序读写的代码,如下, import j ...

随机推荐

  1. git撤销提交(commit)

    我们知道Git有三大区(工作区.暂存区.版本库)以及几个状态(untracked.unstaged.uncommited) 一.简介 Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照 ...

  2. LINQ to Objects系列(3)深入理解Lambda表达式

    Lambda表达式是学好LINQ很重要的一个知识点,后面的LINQ查询中会大量地使用到Lambda表达式.这篇文章从以下几点进行总结. 1,Lambda表达式的前世今生 2,Lambda表达式的实际运 ...

  3. @ContextConfiguration的意思

    @ContextConfiguration的意思 @ContextConfiguration这个注解通常与@RunWith(SpringJUnit4ClassRunner.class)联合使用用来测试 ...

  4. ViewPager实现Recycle机制和响应notifyDataSetChanged

    1.目标 主界面要求水平移动翻页效果,每次只能翻一页,可以翻无数页. 2.实现思路 针对"每次只能翻一页"这个要求,简单使用SDK的话只有用ViewPager.ViewPager的 ...

  5. Asp Url汉字乱码的问题

    1.js <a target="_blank" href="/asp/download.asp?File=' + escape(item.FileName) + ' ...

  6. 表id关联数据获取至页面,制作下拉框多选进行数据多项获取(字段处理)

     这周完成了一张表单,重点碰到以下问题: 1.freemaker获取年份的type值取year,类型直接为Long,传至后台和获取数据不需要转换: 2.freemaker获取日期type值为date, ...

  7. SQL、HQL、JPQL、CQL的对比

    SQL:全称结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统:同时也是数据 ...

  8. QtDesigner与程序设计模式

    在我的上一篇博文中提到我认识到UI设计的重要性.在这里将解析一下使用QtDesigner设计UI进行程序GUI的设计,QtDesigner的.ui文件可以转化为许多的程序代码,比如我知道的就有:c++ ...

  9. MySQL 支持utf8mb4

    utf8mb4 utf8mb3 utf8 Refer to The utf8mb4 Character Set The utf8 Character Set (Alias for utf8mb3) M ...

  10. Linux centos6.5 系统语言改成中文简体

    有时候上传的文件在linux上ls显示的时乱码,原因可能是系统语言编码问题,以Linux centos6.5为例,解决方法如下: 1.在root(皇帝)权限下更改: 查看当前所有语言环境:locale ...