java读写properties配置文件方法
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配置文件方法相关推荐
- Java读写Properties配置文件(Properties类)
Properties Properties基本介绍 Properties常用方法 Properties读取配置文件 Properties写入配置文件 Properties基本介绍 专门用来读写配置文件 ...
- Java 读写Properties配置文件
转自:https://www.cnblogs.com/xudong-bupt/p/3758136.html 1.Properties类与Properties配置文件 Properties类继承自Has ...
- java如何写对象配置文件,Java 读写Properties配置文件详解
1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集.不过Properties有特殊的地 ...
- Java 读写Properties配置文件(转)
转自:http://www.cnblogs.com/xudong-bupt/p/3758136.html 转载于:https://www.cnblogs.com/YangBinChina/p/8970 ...
- java 写入properties文件_Java读写Properties配置文件
Java读写Properties配置文件,1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存 ...
- java 顺序 读写 Properties 配置文件 支持中文 不乱码
java 顺序 读写 Properties 配置文件 ,java默认提供的Properties API 继承hashmap ,不是顺序读写的. 特从网上查资料,顺序读写的代码,如下, import j ...
- Java删除properties配置文件中指定键值的代码
将开发过程较好的一些内容片段记录起来,下面的内容段是关于Java删除properties配置文件中指定键值的内容. public static boolean deleteKeyValue4Pro(S ...
- JAVA通信编程(二)——如何读取java的properties配置文件(插播)
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- java.util.Properties.getProperty()方法实例
java.util.Properties.getProperty(String key) 方法将搜索此属性列表中指定键的属性值.如果在属性列表中,默认属性列表及其默认值找到了键,然后检查递归.如果未找 ...
最新文章
- AI 产品经理的三重门
- Redis的安装与简单部署
- fields and vector spaces
- NOIP2017普及组复赛 解题分析
- java方法重载与返回值类型无关
- 2017 清北学堂 Day 6终极考试报告
- 2017年的6个大数据发展趋势
- 机器人香囊_原来这些穿古装的小孩都是假人,这些店铺都是卖香囊的
- 人工神经网络神经元模型,人工神经元算法机制图
- UI设计中搜索页设计指南
- 比我的脸还干的gan货——Python Flask Web 框架入门
- 解决微信企业号和公众号无法调用摄像头拍视频的问题
- 如何换ionic里面的图标
- 爬虫-模拟点击,实现加载页面全部内容
- C语言实现SM4加解密算法
- mac上的ssh连接工具
- 形式语言与自动机学习复述笔记
- Fiddler 基本使用及自动化测试
- C语言生成JSON格式字符串对接华为物联网云平台
- 9月第1周全球域名商TOP15大战:中国万网排名第7
热门文章
- c语言status显示done6,Netbackup Done status 6 解决方法
- spring 数组中随机取几个_美团Java研发三面(3年经验):MySQL+Spring源码+分布式+算法+线程...
- z390 黑苹果启动盘_不到800元买块1TB固态,折腾一下黑苹果的安装
- python装饰器原理wraps(method)(self)_python装饰器中@wraps作用--修复被装饰后的函数名等属性的改变...
- linux 网卡驱动分析,LINUX_网卡驱动分析
- python xlwt写入excel_python xlwt模块写入excel超过65536行报错问题解决方法
- 有三AI一周年了,说说我们的初衷,生态和愿景
- 中国虚拟电厂运行状况及竞争力分析报告2022-2028年版
- 终于知道PUBWIN2009的数据库用户名与密码已经成功连接
- MockServer jar包安装