Properties 文件操作

本文介绍了如何使用Java的Properties对象进行数据持久化,以解决定时任务中数据丢失的问题。通过静态方法读写Properties文件,实现了简单存储和读取。同时,文章提到了可以将Properties对象与Map操作相结合,方便地进行批量处理。这种存储方式类似于数据库和注册中心,将数据写入非程序本身的位置,确保程序重启后数据依然存在。
摘要由CSDN通过智能技术生成

1、前言

最近接到一个需求,定时获取数据并把数据写入ElasticSearch。

假如每次使用定时启动的时间,每次执行获取一段时间数据,假如每次使用启动成功的时间,会导致数据丢失。

这个时候就考虑对开始时间进行持久化操作。

然后就想到了Properties 对象对数据进行存储。

2、使用方式

这里使用了静态方法对对象进行读写。

   /**
     * 按照key读取 Properties
     * @param tempPath 文件存储目录
     * @param fileName 文件名称
     * @param key 键
     * @return
     */
    public static String readProperties(String tempPath,String fileName,String key){
        Properties properties = new Properties();
        try (FileInputStream inputStream = new FileInputStream(tempPath + fileName)){
            properties.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return properties.getProperty(key);
    }

    /**
     * 写入 Properties
     * @param tempPath 文件存储目录
     * @param fileName 文件名称
     * @param key 键
     * @param value 值
     */
    public static void writeProperties(String tempPath,String fileName,String key,String value){
        Properties properties = new Properties();
        try (FileOutputStream outputStream = new FileOutputStream(tempPath + fileName)){
            properties.setProperty(key,value);
            properties.store(outputStream,"some http request info");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

这里使用了try-with-resource 写法,所以不用关闭流。

对于异常信息,这里没有特殊处理,如果想在项目中使用,可以处理下,例如添加 slf4j 打印等。

  • 批量处理

由于Properties 继承 Hashtable<Object,Object>,而Hashtable 是 实现Map<K,V>,则可以与操作Map相同。

获取所有数据可以使用:

   List<String> values = new ArrayList<>();
   Set<Object> objects = properties.keySet();
   for (Object object : objects) {
       String value = properties.getProperty(String.valueOf(object));
       values.add(value);
   }


 List<String> values = new ArrayList<>();
 Enumeration<Object> keys = properties.keys();
 for (Object object : objects) {
     String value = properties.getProperty(String.valueOf(object));
     values.add(value);
 }


Collection<Object> collect = properties.values();
List<String> values = collect.stream().map(String::valueOf).collect(Collectors.toList())

当然获取部分数据也可以,这个对key 进行对比就可以。

写入的时候 :

Map<String, String> map = new HashMap<>();
properties.putAll(map);
  • 其他

当然使用的使用也可以转换成HashMap进行操作等:

Properties properties = new Properties();
HashMap<Object, Object> hashMap = new HashMap<>(properties);

3、总结

对于我本身的业务来讲,其实是找一个地方进行存储,这也是注册中心,数据库等相同的原理。
拿数据库来讲,写入一个非程序本身的地方,下次直接从存储的地方获取。
注册中心是微服务进行注册,其他微服务不用直接调用本服务,达到解耦的目的。
存储文件也是这种思路,写入一个非程序本身的地方,下次直接获取,重启程序不影响已写的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值