前几天,公司项目中有一个需求是读取配置文件的。并且最好可以保证载入到内存中的顺序可以和配置文件里的顺序一致,可是。假设使用 jdk 中提供的 Properties 类的话,读取配置文件后。载入到内存中的顺序是随机的,不能保证和原文件的顺序一致,因此,jdk 提供的 Properties 是不行的。

背景

因为有这种需求。而 Java 的 Properties 类又不能实现,因此仅仅能想别的办法。我以前想过,在把配置文件载入到内存后,对其进行排序,但这个方法会有非常多限制,并且也有问题。

配置文件里的信息会有非常多,假设对其进行再排序的话。首先会影响系统的性能,其次,对程序的运行效率来讲,也会有一定的影响。最后,经过一番查证之后。同事找到了一篇类似的文章。

解决方式

从文章中了解到,Java 的 Properties 载入属性文件后是无法保证输出的顺序与文件里一致的,由于 Properties 是继承自 Hashtable 的, key/value 都是直接存在 Hashtable 中的,而 Hashtable 是不保证进出顺序的。
文章中已经给提供了代码,思路是继承自 Properties,覆盖原来的 put/keys,keySet,stringPropertyNames 就可以,当中用一个 LinkedHashSet 来保存它的全部 key。完整代码例如以下:
<span style="font-family:Comic Sans MS;">package com.mstar.investmeplugin;import java.util.Collections;
import java.util.Enumeration;
import java.util.LinkedHashSet;
import java.util.Properties;
import java.util.Set;/*** OrderedProperties* @author liii* @date 2015-07-10*/
public class OrderedProperties extends Properties {private static final long serialVersionUID = -4627607243846121965L;private final LinkedHashSet<Object> keys = new LinkedHashSet<Object>();public Enumeration<Object> keys() {return Collections.<Object> enumeration(keys);}public Object put(Object key, Object value) {keys.add(key);return super.put(key, value);}public Set<Object> keySet() {return keys;}public Set<String> stringPropertyNames() {Set<String> set = new LinkedHashSet<String>();for (Object key : this.keys) {set.add((String) key);}return set;}
}</span>

调用方法

<span style="font-family:Comic Sans MS;">Properties props = new OrderedProperties();
props.load(fileInputStream);//通过 keys(), keySet() 或 stringPropertyNames 来遍历都能保证按文件里的顺序输出</span>

结束语

这样的特定的需求。曾经倒是没怎么接触过,不给通过这次的经历,发现了一点,自己的积累还是非常少,不多说了。继续努力吧。
參考:
  • StackOverflow
  • Playframework1中的还有一个实现

读配置文件能够保持顺序的 Java Properties 类相关推荐

  1. Java Properties 类读取配置文件信息

    在我们平时写程序的时候,有些参数是经常改变的,而这种改变不是我们预知的.比如说我们开发了一个操作数据库的模块,在开发的时候我们连接本地的数据库那么 IP ,数据库名称,表名称,数据库主机等信息是我们本 ...

  2. Java Properties 类

    Properties 继承于 Hashtable.表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串. Properties 类被许多Java类使用.例如,在获取环境变量时它就作为Syst ...

  3. java tomcat 读取配置文件端口_跟我学Java编程—应用读写项目配置文件的Properties类...

    我们在开发软件项目时,经常需要读取项目的一些配置数据.例如,项目里用到的数据库链接地址.Tomcat服务端口号.数据文件备份地址等信息都需要放到一个配置文件里,由程序读取并获取.这样做的好处是,当需要 ...

  4. 实现Map并保持插入顺序的Java类?

    我正在寻找具有键-值关联但不使用哈希的Java类. 这是我目前正在做的事情: 将值添加到Hashtable . 获取Hashtable.entrySet()的迭代器. 遍历所有值和: 获取迭代器的Ma ...

  5. Java Properties的使用

    转自:https://www.cnblogs.com/bakari/p/3562244.html 一.Java Properties类 Java中有个比较重要的类Properties(Java.uti ...

  6. Java中Properties类的使用

    在项目的开发中,我们经常写一些.properties文件 用来配置一些相关的内容,比如端口号 IP地址 服务器数据库的地址等等 PS 当然这些东西也是能够写在XML 文件内的. 下面摘抄2处 对于这些 ...

  7. java属性_Java Properties 类

    Java Properties 类 Properties 继承于 Hashtable.表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串. Properties 类被许多 Java 类使用 ...

  8. 比properties更好用的读配置文件的方式

    用properties.load()时总是要求改level为6,很不舒服 学习了用别的方式读配置文件 案例如下: 一.需要的依赖有: <!--log4j日志核心包--><depend ...

  9. Java中的Properties类详解Properties配置文件

    1.Properties类是什么? Properties(Java.util.Properties),该类主要用于读取Java的配置文件,不同的编程语言有自己所支持的配置文件,配置文件中很多变量是经常 ...

最新文章

  1. 软测培训机构哪个比较好
  2. cv2.setNumThreads
  3. 如何给easyui datagrid toolbar上方添加搜索框
  4. liunx系统内核安装图形化界面
  5. VS如何在一个项目中添加多个包含main函数的源文件并分别调试运行
  6. 【MySQL】MySQL 8 Show innodb status 命令改变
  7. python输入名字配对情侣网名_输入姓名配对qq网名,QQ情侣昵称
  8. python如何连续查找字符串_在另一个字符串Python中多次查找字符串
  9. caffe(4):mnist实例---手写数字识别
  10. 【Java】Java语言程序设计(基础篇)全书笔记
  11. 【转载】阿里数据技术大图详解
  12. R语言逻辑回归、ROC曲线和十折交叉验证
  13. php对图片反色处理
  14. HelloWord你的第一个rainmeter皮肤
  15. ARM PWN基础教程
  16. 没有NumLock键的小键盘误触变成方向键
  17. 蓝凌oa任意文件读取,RCE
  18. CF869 E. The Untended Antiquity
  19. JQ实现吸顶效果代码
  20. VS 2008 Express

热门文章

  1. Android GraphicBuffer
  2. Android .so和.a的makefile
  3. Some Tips About Layout Resource
  4. 第二十二章:动画(八)
  5. Dlib学习笔记:dlib array2d与 OpenCV Mat互转
  6. 获取Windows Shell的简单示例程序二
  7. windows连接投影仪后桌面画面和白板画面不一致
  8. 查找、移除某个视图上的某类控件
  9. views display a summary count number
  10. OSCHina技术导向:Java模板引擎velocity