io.github.util.file.JsonFileUtil Maven / Gradle / Ivy
package io.github.util.file;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* Genius
**/
/**
* 操作json文件
*/
public class JsonFileUtil {
private static final Logger logger = LoggerFactory.getLogger(JsonFileUtil.class);
/* ------------------read json file------------------ */
/**
* 读取json文件
* @param filePath 文件路径,应该为全路径
* @param fileName 文件名
*/
public static Map readJsonFile(String filePath, String fileName) {
return readJsonFile(Paths.get(filePath, fileName).toString());
}
/**
* 读取json文件
* @param fullPath 文件路径,包含文件名
*/
public static Map readJsonFile(String fullPath){
Map maps = null;
JSONObject jsonObject = readJsonFileToJSONObject(fullPath);
if (Objects.nonNull(jsonObject)) {
maps = jsonObject.getInnerMap();
}
return maps;
}
/**
* 读取json文件转为JSONObject
* @param fullPath 文件路径,包含文件名
* @return JSONObject
*/
public static JSONObject readJsonFileToJSONObject(String fullPath){
return readJsonFileToObject(fullPath, JSONObject.class);
}
/** 读取json文件转为对应的类
* @param fullPath 文件路径,包含文件名
* @param clazz 类
* @return T
*/
public static T readJsonFileToObject(String fullPath, Class clazz){
T t = null;
Path dir = Paths.get(fullPath);
try{
if (CommonFileUtils.isFileExist(dir.toString())) {
String res = Files.readString(dir, StandardCharsets.UTF_8);
logger.debug("读取json文件成功, 文件内容为: {}", res);
t = JSON.parseObject(res, clazz);
}
}catch (Exception e){
logger.error("读取json文件失败", e);
}
return t;
}
/* ------------------write json file------------------ */
/**
* 写入json文件
* @param filePath 文件路径,应该为全路径
* @param fileName 文件名
* @param data 写入Json数据
* @return File
*/
public static File writeJsonFile(String filePath, String fileName, Map data) {
return writeJsonFile(Paths.get(filePath, fileName).toString(), data);
}
/**
* 读取json文件
* @param fullPath 文件路径,应该为全路径
* @param data 写入Json数据
* @return File
*/
public static File writeJsonFile(String fullPath, Map data) {
return writeJsonFile0(fullPath, JSON.toJSONString(data,true),true);
}
/**
* 写入json文件,如果文件不存在则报错
* @param filePath 文件路径,应该为全路径
* @param fileName 文件名
* @param data 写入Json数据
* @return File
*/
public static File writeJsonFileIsExist(String filePath, String fileName, T data) {
return writeJsonFileIsExist(Paths.get(filePath, fileName).toString(), data);
}
/**
* 写入json文件,如果文件不存在则报错
* @param fullPath 文件路径,应该为全路径
* @param data 写入Json数据
* @return File
*/
public static File writeJsonFileIsExist(String fullPath, T data) {
return writeJsonFile0(fullPath, JSON.toJSONString(data,true),false);
}
/**
* 将Obj写入json文件
* @param filePath 文件路径,应该为全路径
* @param fileName 文件名
* @param obj 写入Json数据
* @return File
*/
public static File writeJsonFile(String filePath, String fileName, T obj) {
return writeJsonFile(Paths.get(filePath, fileName).toString(), obj);
}
/**
* 将Obj写入json文件
* @param fullPath 文件路径,应该为全路径
* @param obj 写入Json数据
* @return File
*/
public static File writeJsonFile(String fullPath, T obj) {
return writeJsonFile0(fullPath, JSON.toJSONString(obj,true),true);
}
/**
* 写入json文件,如果文件不存在则自动创建
* @param fullPath 文件路径,应该为全路径
* @param json 写入Json数据
* @param autoCreate 是否自动创建文件
* @return File
*/
public static File writeJsonFile0(String fullPath, String json,boolean autoCreate) {
Path dir = Paths.get(fullPath);
try{
if(!CommonFileUtils.isFileExist(dir.toString())&&autoCreate){
Files.createFile(dir);
logger.debug("新建文件{}",dir);
}
if (CommonFileUtils.isFileExist(dir.toString())) {
Files.writeString(dir, json, StandardCharsets.UTF_8);
logger.debug("写入json文件成功, 文件内容为: {}", json);
}else {
logger.error("写入json文件失败, 文件不存在");
return null;
}
}catch (Exception e){
logger.error("写入json文件失败", e);
return null;
}
return dir.toFile();
}
/**
* 写入大j对象到Json文件中
* @param fullPath 文件路径,应该为全路径
* @param data 写入Json数据
* @return File
*/
public static File writeBigJsonFile(String fullPath, Map data) {
Path dir = Paths.get(fullPath);
try{
if(!CommonFileUtils.isFileExist(dir.toString())){
Files.createFile(dir);
logger.info("新建文件{}",dir);
}
if (CommonFileUtils.isFileExist(dir.toString())) {
JSONWriter writer = new JSONWriter(Files.newBufferedWriter(dir, StandardCharsets.UTF_8));
writer.startObject();
for (Map.Entry stringObjectEntry : data.entrySet()) {
String key = stringObjectEntry.getKey();
Object value = stringObjectEntry.getValue();
writer.writeKey(key);
writer.writeValue(value);
logger.info("写入json类成功, 类内容为: {}:{}", key, value);
}
writer.endObject();
writer.close();
}else {
logger.error("写入json文件失败, 文件不存在");
return null;
}
}catch (Exception e){
logger.error("写入json文件失败", e);
return null;
}
return dir.toFile();
}
/**
* 写入大j对象到Json文件中
* @param fullPath 文件路径,应该为全路径
* @param Objs 写入大对象的数组
* @return File
*/
public static File writeBigJsonFile(String fullPath, List Objs) {
Path dir = Paths.get(fullPath);
try{
if(!CommonFileUtils.isFileExist(dir.toString())){
Files.createFile(dir);
logger.info("新建文件{}",dir);
}
if (CommonFileUtils.isFileExist(dir.toString())) {
JSONWriter writer = new JSONWriter(Files.newBufferedWriter(dir, StandardCharsets.UTF_8));
writer.startArray();
for (T obj : Objs) {
writer.writeValue(obj);
logger.info("写入json类成功, 类内容为: {}", obj);
}
writer.endArray();
writer.close();
}else {
logger.error("写入json文件失败, 文件不存在");
return null;
}
}catch (Exception e){
logger.error("写入json文件失败", e);
return null;
}
return dir.toFile();
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy