哈喽,大家好,我是灰小猿,一个超会写bug的程序猿!
今天来记录一个在项目实战中比较实用的方法,主要是针对一些需要存在简单数据文件导入导出的场景,如:数据文件的简单备份、软件升版前后配置导入导出等场景
这个方法可以作为一个工具类来使用,可以将想要导出成文件的数据通过导出方法直接导出为json或ini文件,也可以将导出的文件直接通过导入方法进行解析,返回原先的数据模型。
以导出用户数据为例:
数据模型如下:
代码语言:javascript复制import lombok.Data;
import lombok.ToString;
@Data
@ToString
public class User {
private String address;
private String tel;
private int number;
private boolean can;
}
首先通过导出方法,将数据导出为json或ini文件:
代码语言:javascript复制 /**
* 导出json文件
*/
public static void exportJsonFile(String jsonData, String exportPath) {
// 生成json格式文件
try {
// 保证创建一个新文件
File file = new File(exportPath);
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
if (file.exists()) {
file.delete();
}
file.createNewFile();
// 将格式化后的字符串写入文件
Writer write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
write.write(jsonData);
write.flush();
write.close();
} catch (Exception e) {
e.printStackTrace();
}
}
之后如果需要再次将导出的数据导入到软件,只需要导入该文件,下述方法将会自动解析文件并将数据返回出去:
代码语言:javascript复制 /**
* 导入json文件
*/
public static Object importJsonFile(String importFilePath) {
File file = new File(importFilePath);
int ch;
String jsonStr = "";
try (Reader reader = new InputStreamReader(new FileInputStream(file), "Utf-8");) {
StringBuffer sb = new StringBuffer();
while ((ch = reader.read()) != -1) {
sb.append((char) ch);
}
jsonStr = sb.toString();
System.out.println(JSON.parseObject(jsonStr));
} catch (Exception e) {
e.printStackTrace();
}
return JSON.parseObject(jsonStr);
}
在实际使用中的调用方法如下:
代码语言:javascript复制import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.hirain.model.User;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
public class JsonFileUtils {
public static void main(String[] args) {
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("name", "name1");
jsonMap.put("age", 20);
jsonMap.put("sex", true);
User user = new User();
user.setAddress("深圳");
user.setCan(true);
user.setTel("123456");
user.setNumber(110);
User user2 = new User();
user2.setAddress("广州");
user2.setCan(false);
user2.setTel("888888");
user2.setNumber(666);
List<User> users = new ArrayList<>();
users.add(user);
users.add(user2);
jsonMap.put("userInfo", users);
String jsonData = JSON.toJSONString(jsonMap);
//文件输出路径
String exportFilePath = "D:\下载\testjson.json";
exportJsonFile(jsonData, exportFilePath);
log.info("导出成功");
//解析文件实现导入
Map<String, Object> jsonMap2 = (Map<String, Object>) importJsonFile(exportFilePath);
System.out.println(jsonMap2.toString());
Object userInfo = jsonMap2.get("userInfo");
List<User> userJsonList = JSONObject.parseArray(userInfo.toString(), User.class);
System.out.println(userJsonList.toString());
log.info("导入成功");
}
}
上面的方法是以导出json文件为例,如果想要导出ini文件,只需要将文件的后缀名修改一下即可。
在上述方法中,保存到文本的数据是一个map集合,其中存放了多种类型的数据,包括基本的数据类型,以及复杂的对象集合,解析文件之后可以正常拿到这个map集合,并且通过key可以拿到对应的value,
以上就是本期工具类的分享,我们下期见!