背景:
工作中我們可能會遇到需要將某個環境中的某些資料快速的移動到另一個環境的情況,此時我們就可以透過匯入導出json檔案的方式實現。
(學習影片分享:java課程)
範例:
我們將這個環境的資料庫中使用者資訊匯出為一份json格式文件,再直接將json檔案複製到另一個環境匯入到資料庫,這樣可以達到我們的目的。
下面我將使用springboot建立使用者資料資訊的導入匯出案例,實作了單一使用者和多使用者資料庫資訊的導入匯出功能。認真看完這篇文章,你一定能掌握導入導出json檔案的核心
準備工作
#需要maven依賴座標:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.18</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.29</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency>
資料庫中的使用者資訊:
這些欄位資訊與Java中的UserEntity實體類別一一對應
#功能實作
準備好依賴與資料庫信息之後,開始建立使用者匯入匯出特定框架:
匯入匯出單使用者、多使用者功能實作UserUtil
package com.leige.test.util; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import com.leige.test.entity.UserEntity; import com.leige.test.entity.UserEntityList; import com.leige.test.model.ResultModel; import com.leige.test.service.UserService; import org.apache.commons.io.FileUtils; import org.codehaus.jackson.map.ObjectMapper; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; import java.util.List; import java.util.UUID; public class UserUtil { //导入用户 public static ResultModel importUser(MultipartFile multipartFile, UserService userService) { ResultModel resultModel = new ResultModel(); try { // 获取原始名字 String fileName = multipartFile.getOriginalFilename(); // 获取后缀名 String suffixName = fileName.substring(fileName.lastIndexOf(".")); //先将.json文件转为字符串类型 File file = new File("/"+ fileName); //将MultipartFile类型转换为File类型 FileUtils.copyInputStreamToFile(multipartFile.getInputStream(),file); String jsonString = FileUtils.readFileToString(file, "UTF-8"); //如果是json或者txt文件 if (".json".equals(suffixName) || ".txt".equals(suffixName)) { //再将json字符串转为实体类 JSONObject jsonObject = JSONObject.parseObject(jsonString); UserEntity userEntity = JSONObject.toJavaObject(jsonObject, UserEntity.class); userEntity.setId(null); userEntity.setToken(UUID.randomUUID().toString()); //调用创建用户的接口 userService.addUser(userEntity); } else { resultModel.setStatusCode(0); resultModel.setStatusMes("请上传正确格式的.json或.txt文件!"); } } catch (Exception e) { e.printStackTrace(); } return resultModel; } //批量导入用户 public static ResultModel importUsers(MultipartFile multipartFile, UserService userService) { ResultModel resultModel = new ResultModel(); try { // 获取原始名字 String fileName = multipartFile.getOriginalFilename(); // 获取后缀名 String suffixName = fileName.substring(fileName.lastIndexOf(".")); //先将.json文件转为字符串类型 File file = new File("/"+ fileName); //将MultipartFile类型转换为File类型 FileUtils.copyInputStreamToFile(multipartFile.getInputStream(),file); String jsonString = FileUtils.readFileToString(file, "UTF-8"); //如果是json或者txt文件 if (".json".equals(suffixName) || ".txt".equals(suffixName)) { //再将json字符串转为实体类 JSONObject jsonObject = JSONObject.parseObject(jsonString); UserEntityList userEntityList = JSONObject.toJavaObject(jsonObject, UserEntityList.class); List<UserEntity> userEntities = userEntityList.getUserEntities(); for (UserEntity userEntity : userEntities) { userEntity.setId(null); userEntity.setToken(UUID.randomUUID().toString()); //调用创建用户的接口 userService.addUser(userEntity); } } else { resultModel.setStatusCode(0); resultModel.setStatusMes("请上传正确格式的.json或.txt文件!"); } } catch (Exception e) { e.printStackTrace(); } return resultModel; } //导出某个用户 public static ResultModel exportUser(HttpServletResponse response, UserEntity userEntity, String fileName){ ResultModel resultModel = new ResultModel(); ObjectMapper objectMapper = new ObjectMapper(); if (ObjectUtils.isEmpty(userEntity)){ resultModel.setStatusCode(0); resultModel.setStatusMes("此用户id没有对应的用户"); return resultModel; }else { try { String jsonString = objectMapper.writeValueAsString(userEntity); // 拼接文件完整路径// 生成json格式文件 String fullPath = "/" + fileName; // 保证创建一个新文件 File file = new File(fullPath); if (!file.getParentFile().exists()) { // 如果父目录不存在,创建父目录 file.getParentFile().mkdirs(); } if (file.exists()) { // 如果已存在,删除旧文件 file.delete(); } file.createNewFile();//创建新文件 //将字符串格式化为json格式 jsonString = jsonFormat(jsonString); // 将格式化后的字符串写入文件 Writer write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8"); write.write(jsonString); write.flush(); write.close(); FileInputStream fis = new FileInputStream(file); // 设置相关格式 response.setContentType("application/force-download"); // 设置下载后的文件名以及header response.setHeader("Content-Disposition", "attachment;filename=" .concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8")))); response.setCharacterEncoding("utf-8"); // 创建输出对象 OutputStream os = response.getOutputStream(); // 常规操作 byte[] buf = new byte[1024]; int len = 0; while((len = fis.read(buf)) != -1) { os.write(buf, 0, len); } fis.close(); os.close(); //一定要记得关闭输出流,不然会继续写入返回实体模型 return resultModel; } catch (Exception e) { resultModel.setStatusCode(0); resultModel.setStatusMes(e.getMessage()); e.printStackTrace(); return resultModel; } } } //导出所有用户 public static ResultModel exportAllUser(HttpServletResponse response, UserEntityList userEntityList, String fileName){ ResultModel resultModel = new ResultModel(); ObjectMapper objectMapper = new ObjectMapper(); if (ObjectUtils.isEmpty(userEntityList)){ resultModel.setStatusCode(0); resultModel.setStatusMes("此用户id没有对应的用户"); return resultModel; }else { try { String jsonString = objectMapper.writeValueAsString(userEntityList); // 拼接文件完整路径// 生成json格式文件 String fullPath = "/" + fileName; // 保证创建一个新文件 File file = new File(fullPath); if (!file.getParentFile().exists()) { // 如果父目录不存在,创建父目录 file.getParentFile().mkdirs(); } if (file.exists()) { // 如果已存在,删除旧文件 file.delete(); } file.createNewFile();//创建新文件 //将字符串格式化为json格式 jsonString = jsonFormat(jsonString); // 将格式化后的字符串写入文件 Writer write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8"); write.write(jsonString); write.flush(); write.close(); FileInputStream fis = new FileInputStream(file); // 设置相关格式 response.setContentType("application/force-download"); // 设置下载后的文件名以及header response.setHeader("Content-Disposition", "attachment;filename=" .concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8")))); response.setCharacterEncoding("utf-8"); // 创建输出对象 OutputStream os = response.getOutputStream(); // 常规操作 byte[] buf = new byte[1024]; int len = 0; while((len = fis.read(buf)) != -1) { os.write(buf, 0, len); } fis.close(); os.close(); //一定要记得关闭输出流,不然会继续写入返回实体模型 return resultModel; } catch (Exception e) { resultModel.setStatusCode(0); resultModel.setStatusMes(e.getMessage()); e.printStackTrace(); return resultModel; } } } //将字符串格式化为json格式的字符串 public static String jsonFormat(String jsonString) { JSONObject object= JSONObject.parseObject(jsonString); jsonString = JSON.toJSONString(object, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteDateUseDateFormat); return jsonString; } }
1、啟動項目,瀏覽器輸入造訪http://localhost:8888/export/users 匯出所有已有使用者json檔案
2、開啟json檔案檢視格式是否正確
##3、瀏覽器輸入存取http://localhost:8888/ 批次匯入使用者
匯入users.json 檔案############## #輸入位址,點選提交###############查看資料庫,發現增加的兩個測試使用者1,2成功! ###############導入匯出單一使用者這裡就不測試了,更加簡單,其他的關於springboot設定檔和實體類別對應資料庫資訊也不詳細說明了。 ######相關推薦:###java入門######以上是java利用json檔案來實現資料庫資料的導入導出的詳細內容。更多資訊請關注PHP中文網其他相關文章!