使用java.util.Properties提供的类,读取properties文件的时候,读出来的是乱序的

如下边的情况

  1. import java.io.*;
  2. import java.util.Arrays;
  3. import java.util.Enumeration;
  4. import java.util.List;
  5. import java.util.Properties;
  6.  
  7. public class PropertyDemo {
  8.  
  9. public static List<String> old = Arrays.asList("自来水","纯净水", "矿泉水","山泉水" );
  10.  
  11. public static void main(String[] args) {
  12. initType();
  13. }
  14.  
  15. public static void initType() {
  16.  
  17. String path = System.getProperty("user.dir").replaceAll("\\\\", "/");
  18. path = path + "/waterType.properties";
  19. File file = new File(path);
  20. Properties properties = new Properties();
  21. if (!file.exists()) {
  22. try {
  23. FileOutputStream oFile = new FileOutputStream(path, true);
  24. int i = 0;
  25. int len = old.size();
  26. for (; i < len; i++) {
  27. properties.setProperty(String.valueOf(i + 1), old.get(i));
  28. }
  29. properties.store(oFile, "");
  30. oFile.close();
  31. } catch (IOException e) {
  32. e.printStackTrace();
  33. }
  34.  
  35. }
  36. try {
  37. InputStream in = new BufferedInputStream(new FileInputStream(path));
  38. properties.load(in);
  39. in.close();
  40. } catch (IOException ex) {
  41. ex.printStackTrace();
  42. }
  43.  
  44. //遍历
  45. Enumeration<?> e= properties.propertyNames();
  46. while (e.hasMoreElements()){
  47. String key = (String) e.nextElement();
  48. String value = properties.getProperty(key);
  49. System.out.println(key + "=" + value);
  50. }
  51.  
  52. }
  53. }

输出

  1. 4=山泉水
  2. 3=矿泉水
  3. 2=纯净水
  4. 1=自来水

保存到文件的顺序也是如此

那如果想是有序的,怎么办呢?

自定义一个Properties 类

  1. import java.util.*;
  2.  
  3. public class OrderedProperties extends Properties {
  4.  
  5. private final LinkedHashSet<Object> keys = new LinkedHashSet<Object>();
  6.  
  7. public Enumeration<Object> keys() {
  8. return Collections.<Object>enumeration(keys);
  9. }
  10.  
  11. public Object put(Object key, Object value) {
  12. keys.add(key);
  13. return super.put(key, value);
  14. }
  15.  
  16. public Set<Object> keySet() {
  17. return keys;
  18. }
  19.  
  20. public Set<String> stringPropertyNames() {
  21. Set<String> set = new LinkedHashSet<String>();
  22. for (Object key : this.keys) {
  23. set.add((String) key);
  24. }
  25. return set;
  26. }
  27.  
  28. }

使用

  1. import java.io.*;
  2. import java.util.*;
  3.  
  4. public class PropertyDemo {
  5.  
  6. public static List<String> old = Arrays.asList("自来水","纯净水", "矿泉水","山泉水" );
  7.  
  8. public static void main(String[] args) {
  9. initType();
  10. }
  11.  
  12. public static void initType() {
  13.  
  14. String path = System.getProperty("user.dir").replaceAll("\\\\", "/");
  15. path = path + "/waterType.properties";
  16. File file = new File(path);
  17. Properties properties = new OrderedProperties();
  18. if (!file.exists()) {
  19. try {
  20. FileOutputStream oFile = new FileOutputStream(path, true);
  21. int i = 0;
  22. int len = old.size();
  23. for (; i < len; i++) {
  24. properties.setProperty(String.valueOf(i + 1), old.get(i));
  25. }
  26. properties.store(oFile, "");
  27. oFile.close();
  28. } catch (IOException e) {
  29. e.printStackTrace();
  30. }
  31.  
  32. }
  33. try {
  34. InputStream in = new BufferedInputStream(new FileInputStream(path));
  35. properties.load(in);
  36. in.close();
  37. } catch (IOException ex) {
  38. ex.printStackTrace();
  39. }
  40.  
  41. //遍历
  42. Set<String> e = properties.stringPropertyNames();
  43. for (String one : e) {
  44. String key = one;
  45. String value = properties.getProperty(one);
  46. System.out.println(key + "=" + value);
  47. }
  48.  
  49. }
  50. }

输出

  1. 1=自来水
  2. 2=纯净水
  3. 3=矿泉水
  4. 4=山泉水

保存到文件的顺序也是如此

多少迷茫,曾经在幽幽暗暗、反反复复中追问,才知道平平淡淡从从容容才是真。再回首恍然如梦,再回首我心依旧

Properties的有序读写的更多相关文章

  1. Java程序员的日常—— Properties文件的读写

    在日常的Java程序开发中,Properties文件的读写是很常用的.经常有开发系统通过properties文件来当做配置文件,方便用户对系统参数进行调整. 那么本片就来简单的介绍下,如何使用Prop ...

  2. Android 对 properties文件的读写操作

    -. 放在res中的properties文件的读取,例如对放在assets目录中的setting.properties的读取:PS:之所以这里只是有读取操作,而没有写的操作,是因为我发现不能对res下 ...

  3. K:java中properties文件的读写

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

  4. 实现对properties文件的有序读写

    最近遇到一项需求,要求把properties文件中的内容读取出来供用户修改,修改完后需要再重新保存到properties文件中.很简单的需求吧,可问题是Properties是继承自HashTable的 ...

  5. JSP+Java+properties+FileInputStream文件读写,JSP页面读取properties文件

    String realPath = request.getRealPath("WEB-INF/classes/com/properties/devicetype.properties&quo ...

  6. JAVA Properties配置文件的读写

    通常我们就会看到一个配置文件,比如:jdbc.properties,它是以“.properties”格式结尾的.在java中,这种文件的内容以键值对<key,value>存储,通常以“=” ...

  7. Java读写资源文件类Properties

    Java中读写资源文件最重要的类是Properties 1) 资源文件要求如下: 1.properties文件是一个文本文件 2.properties文件的语法有两种,一种是注释,一种属性配置.  注 ...

  8. Properties读写资源文件

    Java中读写资源文件最重要的类是Properties,功能大致如下: 1. 读写Properties文件 2. 读写XML文件 3. 不仅可以读写上述两类文件,还可以读写其它格式文件如txt等,只要 ...

  9. Java读写配置文件——Properties类的简要使用笔记

    任何编程语言都有自己的读写配置文件的方法和格式,Java也不例外. 在Java编程语言中读写资源文件最重要的类是Properties,功能大致如下: 1. 读写Properties文件 2. 读写XM ...

随机推荐

  1. JAVA接口与类的区别

    抽象类:一个类中有抽象方法,这个类就变成了抽象类.抽象类中class的前面必须有abstract修饰符.抽象类中可以有普通方法,也可以有抽象方法,而抽象方法的个数可以是0个,也可以是多个.子类继承父类 ...

  2. JavaScript原始类型转换和进制转换

    1.JavaScript转换包括:强制转换和基本转换 如: var  str = 'A',num=10,nu=null,t=true,und=undefined,x; //注意:定义的x未被初始化:默 ...

  3. 【JZOJ6233】【20190627】心的旋律

    题目 你需要构造一个\(n\)个点的二分图 定义\(F(A)\)表示左部点集\(A\)能够到达的右部中的点 使得满足 $ F(A) \lt |A| $ 的集合恰好有 $ k $ 个 \(1 \le n ...

  4. hbase基础知识一

    1. hbase是什么 漫画学习hbase----最易懂的Hbase架构原理解析 http://developer.51cto.com/art/201904/595698.htm 1.1 hbase的 ...

  5. BZOJ2151/洛谷P1792 题解

    若想要深入学习反悔贪心,传送门. Description: 有 \(n\) 个位置,每个位置有一个价值.有 \(m\) 个树苗,将这些树苗种在这些位置上,相邻位置不能都种.求可以得到的最大值或无解信息 ...

  6. AntDesign-React与VUE有点不一样,第一篇深入了解React的概念之一:JSX

    AntDesign-React与VUE有点不一样,第一篇深入了解React的概念之一:JSX 一.什么是JSX 使用JSX声明一个变量(REACT当中的元素): const element =< ...

  7. Mean Average Precision(mAP),Precision,Recall,Accuracy,F1_score,PR曲线、ROC曲线,AUC值,决定系数R^2 的含义与计算

    背景   之前在研究Object Detection的时候,只是知道Precision这个指标,但是mAP(mean Average Precision)具体是如何计算的,暂时还不知道.最近做OD的任 ...

  8. 【BigData】Java基础_循环

    1.for循环 语法: for (初始表达式;布尔表达式;步进) { 循环体: } 实例: package cn.test.logan.day02; import java.util.Scanner; ...

  9. 设计模式概要 & 六原则一法则

    参考文章 http://blog.csdn.net/sinat_26342009/article/details/46419873 继承vs组合:http://www.cnblogs.com/feic ...

  10. python 五星红旗

    import turtle turtle.setup(600,400,0,0) turtle.bgcolor("red") turtle.fillcolor("yello ...