代码:

package com.sux.demo.utils;

import com.alibaba.fastjson.JSONObject;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map; /**
* 存储工具类
*/
public class StoreUtil { private static final String fileDir = "/home/server/import/wifi/log/"; private static final String fileName = "store-kafka-delay-check.log"; private static Object lock = new Object(); public static void write(String key, Object value) throws IOException {
Map<String, Object> map = read();
if (map.containsKey(key)) {
map.remove(key);
}
map.put(key, value);
String strJson = JSONObject.toJSONString(map); synchronized (lock) {
mkdirs();
FileOutputStream fos = new FileOutputStream(fileDir + fileName);
byte[] bytes = strJson.getBytes(Charset.forName("utf-8"));
fos.write(bytes);
fos.close();
}
} public static Object read(String key) throws IOException {
Map<String, Object> map = read();
if (map.containsKey(key)) {
return map.get(key);
}
return null;
} private static Map<String, Object> read() throws IOException {
synchronized (lock) {
mkdirs();
File file = new File(fileDir + fileName);
if (file.exists() && file.isFile()) {
FileInputStream fis = new FileInputStream(fileDir + fileName);
byte[] bytes = new byte[fis.available()];
fis.read(bytes, 0, bytes.length);
fis.close();
String strJson = new String(bytes, Charset.forName("utf-8"));
return JSONObject.parseObject(strJson);
} else {
return new HashMap<>();
}
}
} private static void mkdirs() {
File file = new File(fileDir);
if (!file.exists() && !file.isDirectory()) {
file.mkdirs();
}
} }

自己写的一个服务程序需要这个功能,为什么我会需要一个这么low的工具类呢?

Java 键值对数据本地保存与读取的更多相关文章

  1. Android系统编程入门系列之应用内键值对数据的简单保存

    在应用程序间及与用户的通信交互过程中,会产生并传递一系列数据.针对这些数据,有部分是只在应用程序中使用的缓存数据,还有一部分是在不同位置多次或长时间使用的持久化数据. 对于缓存数据来说,通常以代码中定 ...

  2. JAVA整合Redis使用redisTemplate清除库中的所有键值对数据

    JAVA整合Redis使用redisTemplate清除库中的所有键值对数据,清除所有缓存数据 Set<String> keys = redisTemplate.keys("*& ...

  3. 什么是java 键值对

    所谓键值对,你可以查看jdk文档,找MAP接口,它的实现类都是键值对的形式保存数据的 键:就是你存的值的编号值:就是你要存放的数据

  4. unity 通过JsonUtility实现json数据的本地保存和读取

    本文主要讲解json数据在本地的保存和读取,使用的是unity5之后提供的JsonUtility工具. 一.关于json数据的保存 在实际开发中,有时候可能涉及到大量数据保存到本地,以便于下次客户端的 ...

  5. C# 键值对数据排序

    对于键值对的数据进行排序方法总结. /*使用排序字典,默认只支持升序 SortedDictionary<DateTime, String> dd = new SortedDictionar ...

  6. c# unity PlayerPrefs 游戏存档,直白点就是讲游戏数据本地保存下来

    在游戏会话中储存和访问游戏存档.这个是持久化数据储存,比如保存游戏记录. 我的理解是通过某个特殊的标签来保存在本地,而且该标签为key的意思,初始值不用赋值. 在游戏开发中较为实用. 暂时用到了 Se ...

  7. JavaScript获取Django模板中指定键值的数据,使用过滤器

    Django中利用js来操作数据的常规操作一般为点(.)操作符来获取字典或列表的数据,一般如{{data.0}},{{data.arg}} 但有时如果数据是嵌套类型的数据时,直接获取某个值就变得困难了 ...

  8. MyBatis返回Map键值对数据

    List<Map<String, String>> getMtypeList(); <select id="getMtypeList" resultT ...

  9. Python中数据的保存和读取

    在科学计算的过程中,往往需要保存一些数据,也经常需要把保存的这些数据加载到程序中,在 Matlab 中我们可以用 save 和 lood 函数很方便的实现.类似的在 Python 中,我们可以用 nu ...

  10. Python numpy数据的保存和读取

    在科学计算的过程中,往往需要保存一些数据,也经常需要把保存的这些数据加载到程序中,在 Matlab 中我们可以用 save 和 lood 函数很方便的实现.类似的在 Python 中,我们可以用 nu ...

随机推荐

  1. Codeforces Round #696 (Div. 2) (A~C题解)

    写在前边 链接:Codeforces Round #696 (Div. 2) A. Puzzle From the Future 链接:A题链接 题目大意: 给定一个\(a\),\(b\),\(d = ...

  2. go基础-接口

    一.概述 接口是面向对象编程的重要概念,接口是对行为的抽象和概括,在主流面向对象语言Java.C++,接口和类之间有明确关系,称为"实现接口".这种关系一般会以"类派生图 ...

  3. C语言一个单链表L=(a1 , a2 , … , an-1 , an),其逆单链表定义为L’=( an , an-1 , … , a2 , a1),要求逆单链表仍占用原单链表的空间。

    /* 开发者:慢蜗牛 开发时间:2020.6.11 程序功能:顺序输出和逆序输出 */ #include<stdio.h> #include<malloc.h> #define ...

  4. Spring Boot 3.2发布:大量Java 21的支持上线,改进可观测性

    就在今天凌晨,Spring Boot 3.2正式发布了!该版本是在Java 21正式发布之后的重要支持版本,所以在该版本中包含大量对Java 21支持的优化. 下面,我们分别通过Spring官方发布的 ...

  5. springboot集成mybatis-plus

    集成mybatis-plus 1.添加pom.xml <!--mp逆向工程 --> <dependency> <groupId>org.projectlombok& ...

  6. 神经网络入门篇:详解参数VS超参数(Parameters vs Hyperparameters)

    参数 VS 超参数 什么是超参数? 比如算法中的learning rate \(a\)(学习率).iterations(梯度下降法循环的数量).\(L\)(隐藏层数目).\({{n}^{[l]}}\) ...

  7. Java 21中的两个值得关注的Bug修复

    在Java 21中,除了推出很多新特性之外,一些Bug修复,也需要注意一下.因为这些改变可能在升级的时候,造成影响. Double.toString()和Float.toString()的精度问题修复 ...

  8. Java项目整合短信验证码

    一.开通短信服务 本来想整合阿里云短信服务的,可是签名一直审核不过,所以在阿里云的云市场找到了一个替代产品(sddx) 接下来小伙伴们按照自己的经济实力购买或者用免费的5条(我就是用免费的5条了) 购 ...

  9. 探秘扫雷游戏的C语言实现

    1 引言 1.1 为什么写这篇文章? 项目仓库地址:基于 C 语言实现的扫雷游戏 我决定写这篇文章的初衷是想分享我在使用C语言开发扫雷游戏的经验和心得.通过这篇文章,我希望能够向读者展示我是如何利用C ...

  10. ASR项目实战-架构设计

    一般而言,业务诉求作为架构设计的输入. 需求清单 对于语音识别产品而言,需满足的需求,举例如下: 功能需求 文件转写. 长文件转写,时长大于60秒,小于X小时,X可以指定为5. 短文件转写,时长小于6 ...