• Properties的有序读写


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

    如下边的情况

    import java.io.*;
    import java.util.Arrays;
    import java.util.Enumeration;
    import java.util.List;
    import java.util.Properties;
    
    public class PropertyDemo {
    
        public static List<String> old = Arrays.asList("自来水","纯净水", "矿泉水","山泉水" );
    
        public static void main(String[] args) {
            initType();
        }
    
        public static void initType() {
    
            String path = System.getProperty("user.dir").replaceAll("\\", "/");
            path = path + "/waterType.properties";
            File file = new File(path);
            Properties properties = new Properties();
            if (!file.exists()) {
                try {
                    FileOutputStream oFile = new FileOutputStream(path, true);
                    int i = 0;
                    int len = old.size();
                    for (; i < len; i++) {
                        properties.setProperty(String.valueOf(i + 1), old.get(i));
                    }
                    properties.store(oFile, "");
                    oFile.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
            try {
                InputStream in = new BufferedInputStream(new FileInputStream(path));
                properties.load(in);
                in.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
    
            //遍历
            Enumeration<?> e= properties.propertyNames();
            while (e.hasMoreElements()){
                String key = (String) e.nextElement();
                String value = properties.getProperty(key);
                System.out.println(key + "=" + value);
            }
    
        }
    }

    输出

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

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

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

    自定义一个Properties 类

    import java.util.*;
    
    public class OrderedProperties extends Properties {
    
        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;
        }
    
    }

    使用

    import java.io.*;
    import java.util.*;
    
    public class PropertyDemo {
    
        public static List<String> old = Arrays.asList("自来水","纯净水", "矿泉水","山泉水" );
    
        public static void main(String[] args) {
            initType();
        }
    
        public static void initType() {
    
            String path = System.getProperty("user.dir").replaceAll("\\", "/");
            path = path + "/waterType.properties";
            File file = new File(path);
            Properties properties = new OrderedProperties();
            if (!file.exists()) {
                try {
                    FileOutputStream oFile = new FileOutputStream(path, true);
                    int i = 0;
                    int len = old.size();
                    for (; i < len; i++) {
                        properties.setProperty(String.valueOf(i + 1), old.get(i));
                    }
                    properties.store(oFile, "");
                    oFile.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
            try {
                InputStream in = new BufferedInputStream(new FileInputStream(path));
                properties.load(in);
                in.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
    
            //遍历
            Set<String> e = properties.stringPropertyNames();
            for (String one : e) {
                String key = one;
                String value = properties.getProperty(one);
                System.out.println(key + "=" + value);
            }
    
        }
    }

    输出

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

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

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

  • 相关阅读:
    解决electron-vue中无法使用Element的Tooltip组件
    解决Electron安装包下载慢的问题
    虚拟机VirtualBox 共享挂载问题:mount: /mnt/xxx: wrong fs type, bad option, bad superblock on xxx
    git 设置和取消代理
    (转载)数据库连接池到底应该设多大?这篇文章可能会颠覆你的认知
    MySQL主主复制+MMM实现高可用
    Mysql5.6主从热备配置
    java 启动 shell脚本
    redis批量删除key
    spring mvc异常统一处理(ControllerAdvice注解)
  • 原文地址:https://www.cnblogs.com/baby123/p/11557689.html
Copyright © 2020-2023  润新知