Java 键值对数据本地保存与读取
代码:

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 键值对数据本地保存与读取的更多相关文章
- Android系统编程入门系列之应用内键值对数据的简单保存
在应用程序间及与用户的通信交互过程中,会产生并传递一系列数据.针对这些数据,有部分是只在应用程序中使用的缓存数据,还有一部分是在不同位置多次或长时间使用的持久化数据. 对于缓存数据来说,通常以代码中定 ...
- JAVA整合Redis使用redisTemplate清除库中的所有键值对数据
JAVA整合Redis使用redisTemplate清除库中的所有键值对数据,清除所有缓存数据 Set<String> keys = redisTemplate.keys("*& ...
- 什么是java 键值对
所谓键值对,你可以查看jdk文档,找MAP接口,它的实现类都是键值对的形式保存数据的 键:就是你存的值的编号值:就是你要存放的数据
- unity 通过JsonUtility实现json数据的本地保存和读取
本文主要讲解json数据在本地的保存和读取,使用的是unity5之后提供的JsonUtility工具. 一.关于json数据的保存 在实际开发中,有时候可能涉及到大量数据保存到本地,以便于下次客户端的 ...
- C# 键值对数据排序
对于键值对的数据进行排序方法总结. /*使用排序字典,默认只支持升序 SortedDictionary<DateTime, String> dd = new SortedDictionar ...
- c# unity PlayerPrefs 游戏存档,直白点就是讲游戏数据本地保存下来
在游戏会话中储存和访问游戏存档.这个是持久化数据储存,比如保存游戏记录. 我的理解是通过某个特殊的标签来保存在本地,而且该标签为key的意思,初始值不用赋值. 在游戏开发中较为实用. 暂时用到了 Se ...
- JavaScript获取Django模板中指定键值的数据,使用过滤器
Django中利用js来操作数据的常规操作一般为点(.)操作符来获取字典或列表的数据,一般如{{data.0}},{{data.arg}} 但有时如果数据是嵌套类型的数据时,直接获取某个值就变得困难了 ...
- MyBatis返回Map键值对数据
List<Map<String, String>> getMtypeList(); <select id="getMtypeList" resultT ...
- Python中数据的保存和读取
在科学计算的过程中,往往需要保存一些数据,也经常需要把保存的这些数据加载到程序中,在 Matlab 中我们可以用 save 和 lood 函数很方便的实现.类似的在 Python 中,我们可以用 nu ...
- Python numpy数据的保存和读取
在科学计算的过程中,往往需要保存一些数据,也经常需要把保存的这些数据加载到程序中,在 Matlab 中我们可以用 save 和 lood 函数很方便的实现.类似的在 Python 中,我们可以用 nu ...
随机推荐
- 记一次有趣的hwclock写RTC的PermissionDenied错误
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明 无 前言 稍微接触过嵌入式板卡的,基本都知道嵌 ...
- ArmSoM-W3应用开发之安装docker
1. 简介 RK3588从入门到精通系列专题 开发板:ArmSoM-W3 Kernel:5.10.160 OS:Debian11 本⽂介绍ArmSoM-W3在Debian11下如何安装使用docker ...
- 一个.Net开源的协作办公套件,包括文档、表格、演示文稿和表单
推荐一个开源的文档协作办公套件,可以很好的满足团队对方便.高效.安全的方式来处理文档工作,促进团队协作和信息共享. 项目简介 ONLYOFFICE 是一个开源的办公套件,包括文档.表格.演示文稿和表单 ...
- zookeeper JavaApi 创建节点
import org.apache.curator.RetryPolicy; import org.apache.curator.framework.CuratorFramework; import ...
- MySQL运维5-Mycat配置
一.schema.xml 1.1 简介 schema.xml作为Mycat中最重要的配置文件之一,涵盖了Mycat的逻辑库.逻辑表.分片规则.分片节点即数据源的配置.主要包括一下三组标签 schema ...
- 终结篇:==和equals有什么区别?
== 和 equals 有什么区别?这个问题本身不难,但是被问到的频率很高,且大部分人的回答都不够全面,让人听了有种"恨铁不成钢"的感觉,所以今天咱们就来好好聊聊这个问题. 1.典 ...
- 27、Type关键字
1.是什么? type是go语法里额重要而且常用的关键字,type绝不只是对应于C/C++中的typeof.搞清楚type的使用,就容易理解Go语言中的核心概念struct.interface.函数等 ...
- 后端程序员必会的前端知识-05:React
五. React 1. React 基础 react 是前端三大框架之一 没有 vue 的基础更好,因为两者思想不太一样,不能用 vue 的习惯学习 react 需要有 js 基础,视频 19-58 ...
- 印能捷添加了加密进程导出的pdf文件不加密(rename的类型未添加)
解决方法:用procmon监控下图的所有文件事件,查找rename的类型,然后右键SetRenameInfo点击Include,将查出来的类型添加到加密后缀中,如下图是一个无后缀的类型需要添加\NOE ...
- 性能测试常见面试题(Loadrunner)
https://blog.csdn.net/xiangxiupp/article/details/53862056