• 通过POI将数据库中的数据导出到本地(含将Json文件格式化的相关demo)


    一、 将数据库中的数据导入到本地-----生成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 }
    JSON字符串格式化工具类

     将数据库中的数据导入到本地-----生成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     }
  • 相关阅读:
    第02组 Beta版本演示
    2020系统综合实践8 大作业 智能门禁
    2020系统综合实践6 树莓派基本入门
    2020系统综合实践5 使用Dokcer部署Python运行环境
    2020系统综合实践4 Dokcer专题实践
    2020系统综合实践3 使用Docker Compose部署LNMP
    2020系统综合实践2 使用Dokcer部署Nginx和MySQL容器
    2020系统综合实践1 WSL 2的安装和基本使用
    2020系统综合实践1 VirtualBox下安装Debian踩坑小结
    团队第六次——beta冲刺日志集合
  • 原文地址:https://www.cnblogs.com/vegetableDD/p/11761730.html
Copyright © 2020-2023  润新知