导入依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.5</version>
</dependency>
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.9</version>
</dependency>
打包工具类
public class PackDataUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(PackDataUtils.class);
public static final String PACK_SUFFIX = ".data";
public static final String JSON_SUFFIX = ".json";
public static final String TEMP_PATH = "D://tempPath/";
public static final String OUT_PATH = "D://downloadPath/";
public static String createTempPath() {
String tempPath = TEMP_PATH + DateUtils.dateTimeNow();
File file = new File(tempPath);
if (!file.exists()) {
file.mkdirs();
}
return tempPath;
}
public static String createPath(String targetPath, String path) {
File file = new File(targetPath + File.separator + path);
if (!file.exists()) {
file.mkdirs();
}
return file.getPath();
}
public static String compressDataPack(String inPath, String fileName, String outPath) {
ZipUtil.zip(inPath, outPath + File.separator + fileName, false);
FileUtil.del(inPath);
return fileName;
}
public static String compressDataPack(String tempPath, String fileName) {
return compressDataPack(tempPath, fileName, OUT_PATH);
}
public static String compressDataPack(String tempPath) {
return compressDataPack(tempPath, DateUtils.dateTimeNow() + PACK_SUFFIX, OUT_PATH);
}
public static String npackDataPack(MultipartFile file) {
String tempPath = createTempPath();
String fileName = file.getOriginalFilename();
if (!fileName.endsWith(PACK_SUFFIX)) {
throw new BaseException("文件类型错误");
}
String filePath = tempPath + fileName;
try {
file.transferTo(new File(filePath));
} catch (IOException e) {
throw new BaseException("文件解析失败");
}
ZipUtil.unzip(filePath, tempPath, CharsetUtil.CHARSET_GBK);
return tempPath;
}
private static void writeJson(String fileName, String outPath, byte[] tList) {
if (StringUtils.isNotEmpty(fileName)) {
outPath = outPath + File.separator + fileName + JSON_SUFFIX;
}
FileOutputStream fos = null;
try {
fos = new FileOutputStream(outPath);
fos.write(tList);
} catch (IOException e) {
LOGGER.error("writeJson -> There was a problem writing to the JSON file : 写入JSON文件时出现了问题");
} finally {
try {
IOUtils.close(fos);
} catch (IOException e) {
LOGGER.error(ExceptionUtils.getMessage(e));
}
}
}
public static void writeListToJson(List<?> tList, String outPath, String fileName) {
if (tList.size() == 0) {
return;
}
writeJson(fileName, outPath, JSON.toJSONBytes(tList));
}
public static void writeEntityToJson(Object o, String outPath, String fileName) {
if (o == null) {
return;
}
writeJson(fileName, outPath, JSON.toJSONBytes(o));
}
public static void writeListToJson(List<?> tList, String outPath) {
String simpleName = "";
if (tList.size() == 0) {
return;
}
if (StringUtils.isNotNull(tList.get(0))) {
simpleName = getClassSimpleName(tList.get(0).getClass());
}
writeListToJson(tList, outPath, simpleName);
}
public static void writeEntityToJson(Object o, String outPath) {
writeEntityToJson(o, outPath, getClassSimpleName(o.getClass()));
}
private static String getJsonContent(String inPath) {
String jsonContent = "";
try {
jsonContent = FileUtils.readFileToString(new File(inPath + JSON_SUFFIX), "UTF-8");
} catch (IOException e) {
LOGGER.error("getJsonContent -> There was a problem reading the JSON file : 读取JSON文件时出现了问题");
}
return jsonContent;
}
public static <T> List<T> readJsonToList(String inPath, Class<T> tClass, String fileName) {
return JSON.parseArray(getJsonContent(inPath + File.separator + fileName), tClass);
}
public static <T> T readJsonToObject(String inPath, Class<T> tClass, String fileName) {
return JSON.parseObject(getJsonContent(inPath + File.separator + fileName), tClass);
}
public static <T> List<T> readJsonToList(String inPath, Class<T> tClass) {
return readJsonToList(inPath, tClass, getClassSimpleName(tClass));
}
public static <T> T readJsonToObject(String inPath, Class<T> tClass) {
return readJsonToObject(inPath, tClass, getClassSimpleName(tClass));
}
public static String getClassSimpleName(Class<?> tClass) {
return tClass.getSimpleName();
}
public static String getClassSimpleNameJson(Class<?> tClass) {
return getClassSimpleName(tClass) + JSON_SUFFIX;
}
}
调用方式
public String exportDataPack() {
String tempPath = PackDataUtils.createTempPath();
String zipName = "数据包.data";
List<> userList = new ArrayList<>();
userList.add(new User(1, "张三"));
userList.add(new User(2, "李四"));
userList.add(new User(3, "王五"));
PackDataUtils.writeListToJson(userList, tempPath);
return AjaxResult.success(PackDataUtils.compressDataPack(tempPath, zipName));
}
public void importDataPack(importEntity importEntity) {
final MultipartFile importFile = importEntity.getFile();
String filePath = PackDataUtils.npackDataPack(importFile) + File.separator;
if (FileUtil.exist(filePath + PackDataUtils.getClassSimpleNameJson(User.class))) {
List<JhExpenditure> users = PackDataUtils.readJsonToList(filePath, User.class);
}
FileUtil.del(filePath);
}