一、 将数据库中的数据导入到本地-----生成Json文件
1、将数据库中的数据导出到本地生成Json文件
1 /**
2 *
3 * @param dbDataList 从数据库中查询出来的结果集,封装到List<Map>中,这里根据需求进行更改
4 * @param path 将文件生成到本地或者指定路径下
5 * @param fileName 生成文件的文件名
6 * @return
7 */
8 public boolean createJsonFile(List<Map<String, Object>> dbDataList, String path, String fileName) {
9 boolean flag = false;
10 Map<String, Object> map = new HashMap<>();
11 map.put("data", dbDataList);
12 JSONObject jsonObject = JSONObject.fromObject(map);
13 String jsonStr = jsonObject.toString();
14 jsonStr = JsonFormatTool.formatJson(jsonStr);
15 try {
16 //File.separator 这里指的是目录之间的分隔符,即 /
17 String fullPath = path + File.separator + fileName + ".json";
18 File file = new File(fullPath);
19 //创建文件的时候,如果该文件的父路径不存在,则创建父路径上相关的文件夹
20 if (!file.getParentFile().exists()) {
21 file.getParentFile().mkdirs();
22 }
23 //如果需要创建的文件已经存在,删除旧的文件
24 if (file.exists()) {
25 file.delete();
26 }
27 flag = file.createNewFile();
28 //写入内容的时候指定编码格式,避免乱码
29 Writer os = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
30 os.write(jsonStr);
31 os.flush();
32 os.close();
33 } catch (IOException e) {
34 flag = false;
35 e.printStackTrace();
36 }
37 return flag;
38 }
2、将生成的Json文件格式化的相关工具类(直接将Json字符串当做参数传递进去即可)
1 public class JsonFormatTool { 2 /** 3 * 单位缩进字符串。 4 */ 5 private static String SPACE = " "; 6 7 /** 8 * 返回格式化JSON字符串。 9 * 10 * @param json 未格式化的JSON字符串。 11 * @return 格式化的JSON字符串。 12 */ 13 public static String formatJson(String json) { 14 StringBuffer result = new StringBuffer(); 15 16 int length = json.length(); 17 int number = 0; 18 char key = 0; 19 20 // 遍历输入字符串。 21 for (int i = 0; i < length; i++) { 22 // 1、获取当前字符。 23 key = json.charAt(i); 24 25 // 2、如果当前字符是前方括号、前花括号做如下处理: 26 if ((key == '[') || (key == '{')) { 27 // (1)如字果前面还有字符,并且字符为“:”,打印:换行和缩进字符符串。 28 if ((i - 1 > 0) && (json.charAt(i - 1) == ':')) { 29 result.append(' '); 30 result.append(indent(number)); 31 } 32 33 // (2)打印:当前字符。 34 result.append(key); 35 36 // (3)前方括号、前花括号,的后面必须换行。打印:换行。 37 result.append(' '); 38 39 // (4)每出现一次前方括号、前花括号;缩进次数增加一次。打印:新行缩进。 40 number++; 41 result.append(indent(number)); 42 43 // (5)进行下一次循环。 44 continue; 45 } 46 47 // 3、如果当前字符是后方括号、后花括号做如下处理: 48 if ((key == ']') || (key == '}')) { 49 // (1)后方括号、后花括号,的前面必须换行。打印:换行。 50 result.append(' '); 51 52 // (2)每出现一次后方括号、后花括号;缩进次数减少一次。打印:缩进。 53 number--; 54 result.append(indent(number)); 55 56 // (3)打印:当前字符。 57 result.append(key); 58 59 // (4)如果当前字符后面还有字符,并且字符不为“,”,打印:换行。 60 if (((i + 1) < length) && (json.charAt(i + 1) != ',')) { 61 result.append(' '); 62 } 63 64 // (5)继续下一次循环。 65 continue; 66 } 67 68 // 4、如果当前字符是逗号。逗号后面换行,并缩进,不改变缩进次数。 69 if ((key == ',')) { 70 result.append(key); 71 result.append(' '); 72 result.append(indent(number)); 73 continue; 74 } 75 76 // 5、打印:当前字符。 77 result.append(key); 78 } 79 80 return result.toString(); 81 } 82 83 /** 84 * 返回指定次数的缩进字符串。每一次缩进三个空格,即SPACE。 85 * 86 * @param number 缩进次数。 87 * @return 指定缩进次数的字符串。 88 */ 89 private static String indent(int number) { 90 StringBuffer result = new StringBuffer(); 91 for (int i = 0; i < number; i++) { 92 result.append(SPACE); 93 } 94 return result.toString(); 95 } 96 }
将数据库中的数据导入到本地-----生成Excel文件
1 /**
2 *
3 * @param dbDataList 从数据库中查询出来的结果集,封装到List<Map>中,这里根据需求进行更改
4 * @param path 将文件生成到本地或者指定路径下
5 * @param fileName 生成文件的文件名
6 */
7 public void exportData2Excel(List<Map<String,Object>> dbDataList,String path,String fileName){
8 try {
9 //1.通过读取模板创建工作簿
10 Workbook sheets = new XSSFWorkbook("D:\aa\bb\我是一个excel文件.xlsx");
11 //2.获取到第二个sheet(根据需求进行更改)
12 Sheet sheet = sheets.getSheetAt(1);
13 //3.提取正文的样式
14 String sheetName = sheet.getSheetName();
15 CellStyle css [] = new CellStyle[7]; //css[0] 这里注意模板中格子的位置
16 Row row = sheet.getRow(2);//具体根据excel中的模板决定到底需要从第几行开始录入数据
17 for (int i = 1; i < css.length; i++) {
18 Cell cell = row.getCell(i);
19 css[i] = cell.getCellStyle(); //获取指定cell格子所具备的样式,存储到CellStyle数组中。
20 }
21 //4.循环创建所有的正文的单元格数据行
22 int index = 1;
23 for (Map<String,Object> data : dbDataList) {
24 row = sheet.createRow(index++);
25 //EXCEL编号
26 Cell cell = row.createCell(1);//如果格子中没有值的话,这里会报空指针异常
27 cell.setCellValue((String) data.get("Map集合中的key1"));
28 cell.setCellStyle(css[1]);
29 //sheet名称
30 cell = row.createCell(2);
31 cell.setCellValue((String) data.get("map集合中的key2"));
32 cell.setCellStyle(css[2]);
33 //Cell位置
34 cell = row.createCell(3);
35 cell.setCellValue((String) data.get("key3"));
36 cell.setCellStyle(css[3]);
37 //指标编码
38 cell = row.createCell(4);
39 cell.setCellValue((String) data.get("key4"));
40 cell.setCellStyle(css[4]);
41 //维度1
42 cell = row.createCell(5);
43 cell.setCellValue((String) data.get("key5"));
44 cell.setCellStyle(css[5]);
45 //
46 cell = row.createCell(6);
47 cell.setCellValue((String) data.get("key6"));
48 cell.setCellStyle(css[6]);
57 }
58 //File.separator 这里指的是目录之间的分隔符,即 /
59 String fullPath = path + File.separator + fileName + ".xlsx";
60 File file = new File(fullPath);
61 //创建文件的时候,如果该文件的父路径不存在,则创建父路径上相关的文件夹
62 if (!file.getParentFile().exists()) {
63 file.getParentFile().mkdirs();
64 }
65 //如果需要创建的文件已经存在,删除旧的文件
66 if (file.exists()) {
67 file.delete();
68 }
69 //将文件读成流,用Workbook将流写到本地
70 FileOutputStream os = new FileOutputStream(file);
71 sheets.write(os);
72 os.close();
73 } catch (IOException e) {
74 e.printStackTrace();
75 }
76
77 }