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为空则不加注释

下面进行代码演示

 1 /*初始配置文件
 2 aa=1
 3 bb=2
 4 cc=3
 5 */
 6
 7 Properties prop = new Properties();    //创建Properties对象
 8 InputStream in = null;
 9 FileOutputStream oFile = null;
10 try {
11     in = new FileInputStream("filePath");   //创建输入流文件对象
12     prop.load(in);                          //加载输入流
13     System.out.println("aa=" + prop.getProperty("aa"));    //aa=1
14     prop.setProperty("aa", "11");           //修改"aa"的值
15     oFile = new FileOutputStream("filePath");   //创建输出流文件对象
16     prop.store(oFile, "");                  //将Properties对象的属性保存到输出流指定文件
17 } catch (IOException e) {
18     log.error(e);
19 } finally {
20     try {
21         oFile.close();                      //关闭输出流
22     } catch (IOException e) {
23         log.error(e);
24     }
25     try {
26         in.close();                         //关闭输入流
27     } catch (IOException e) {
28         log.error(e);
29     }
30 }

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

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

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

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

FileOutputStream构造函数

FileOutputStream(String name, boolean append)

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

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

 1 /*初始配置文件
 2 aa=1
 3 bb=2
 4 cc=3
 5 */
 6
 7 Properties prop = new Properties();
 8 InputStream in = new FileInputStream("filePath");
 9 prop.load(in);
10 prop.setProperty("aa", "11");
11 FileOutputStream oFile = new FileOutputStream("filePath", true);
12 prop.store(oFile, "");
13
14 /*执行后配置文件
15 aa=1
16 bb=2
17 cc=3
18
19 aa=11
20 bb=2
21 cc=3
22 */

3.2 FileOutputStream创建位置导致诡异事情

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

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

 1 /*初始配置文件
 2 aa=1
 3 bb=2
 4 cc=3
 5 */
 6
 7 //正常写法
 8 InputStream in = new FileInputStream("filePath");
 9 prop.load(in);
10 prop.setProperty("aa", "11");
11 FileOutputStream oFile = new FileOutputStream("filePath");
12 prop.store(oFile, "");
13
14 //问题写法
15 InputStream in = new FileInputStream("filePath");
16 FileOutputStream oFile = new FileOutputStream("filePath");  //提前创建
17 prop.load(in);
18 prop.setProperty("aa", "11");
19 prop.store(oFile, "");
20
21 /*正常执行后的配置文件
22 aa=11
23 bb=2
24 cc=3
25 */
26
27 /*问题执行后的配置文件
28 aa=11
29 */

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

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

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

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

转载于:https://www.cnblogs.com/wangzhisdu/p/7815193.html

java读写properties配置文件方法相关推荐

  1. Java读写Properties配置文件(Properties类)

    Properties Properties基本介绍 Properties常用方法 Properties读取配置文件 Properties写入配置文件 Properties基本介绍 专门用来读写配置文件 ...

  2. Java 读写Properties配置文件

    转自:https://www.cnblogs.com/xudong-bupt/p/3758136.html 1.Properties类与Properties配置文件 Properties类继承自Has ...

  3. java如何写对象配置文件,Java 读写Properties配置文件详解

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

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

    转自:http://www.cnblogs.com/xudong-bupt/p/3758136.html 转载于:https://www.cnblogs.com/YangBinChina/p/8970 ...

  5. java 写入properties文件_Java读写Properties配置文件

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

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

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

  7. Java删除properties配置文件中指定键值的代码

    将开发过程较好的一些内容片段记录起来,下面的内容段是关于Java删除properties配置文件中指定键值的内容. public static boolean deleteKeyValue4Pro(S ...

  8. JAVA通信编程(二)——如何读取java的properties配置文件(插播)

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  9. java.util.Properties.getProperty()方法实例

    java.util.Properties.getProperty(String key) 方法将搜索此属性列表中指定键的属性值.如果在属性列表中,默认属性列表及其默认值找到了键,然后检查递归.如果未找 ...

最新文章

  1. AI 产品经理的三重门
  2. Redis的安装与简单部署
  3. fields and vector spaces
  4. NOIP2017普及组复赛 解题分析
  5. java方法重载与返回值类型无关
  6. 2017 清北学堂 Day 6终极考试报告
  7. 2017年的6个大数据发展趋势
  8. 机器人香囊_原来这些穿古装的小孩都是假人,这些店铺都是卖香囊的
  9. 人工神经网络神经元模型,人工神经元算法机制图
  10. UI设计中搜索页设计指南
  11. 比我的脸还干的gan货——Python Flask Web 框架入门
  12. 解决微信企业号和公众号无法调用摄像头拍视频的问题
  13. 如何换ionic里面的图标
  14. 爬虫-模拟点击,实现加载页面全部内容
  15. C语言实现SM4加解密算法
  16. mac上的ssh连接工具
  17. 形式语言与自动机学习复述笔记
  18. Fiddler 基本使用及自动化测试
  19. C语言生成JSON格式字符串对接华为物联网云平台
  20. 9月第1周全球域名商TOP15大战:中国万网排名第7

热门文章

  1. c语言status显示done6,Netbackup Done status 6 解决方法
  2. spring 数组中随机取几个_美团Java研发三面(3年经验):MySQL+Spring源码+分布式+算法+线程...
  3. z390 黑苹果启动盘_不到800元买块1TB固态,折腾一下黑苹果的安装
  4. python装饰器原理wraps(method)(self)_python装饰器中@wraps作用--修复被装饰后的函数名等属性的改变...
  5. linux 网卡驱动分析,LINUX_网卡驱动分析
  6. python xlwt写入excel_python xlwt模块写入excel超过65536行报错问题解决方法
  7. 有三AI一周年了,说说我们的初衷,生态和愿景
  8. 中国虚拟电厂运行状况及竞争力分析报告2022-2028年版
  9. 终于知道PUBWIN2009的数据库用户名与密码已经成功连接
  10. MockServer jar包安装