Bootstrap

导出工具类(ExportUtils)

 目录

1、导出文本文件

2、导出json文件

3、生成附件文件名(对应1、2中genAttachmentFileName方法)

1、导出文本文件

public class ExportUtils {

    public static void exportTxt(HttpServletResponse response, String text, String fileName) {
        response.setCharacterEncoding("utf-8");
        //设置响应的内容类型
        response.setContentType("text/plain");
        //设置文件的名称和格式
        response.addHeader("Content-Disposition", "attachment;filename="
            + ExportUtils.genAttachmentFileName(fileName, "DEVICE-KEY")//设置名称格式,没有这个中文名称无法显示
            + ".txt");
        BufferedOutputStream buff = null;
        ServletOutputStream outStr = null;
        try {
            outStr = response.getOutputStream();
            buff = new BufferedOutputStream(outStr);
            buff.write(text.getBytes("UTF-8"));
            buff.flush();
            buff.close();
        } catch (Exception e) {
            //LOGGER.error("导出文件文件出错:{}",e);
            throw new GlobalException("导出文件文件出错:" + e.getMessage());
        } finally {
            try {
                buff.close();
                outStr.close();
            } catch (Exception e) {
                //LOGGER.error("关闭流对象出错 e:{}",e);
                throw new GlobalException("关闭流对象出错:" + e.getMessage());
            }
        }
    }

解析:

这段代码是一个Java方法,用于在HTTP响应中导出文本文件。主要功能是设置相应的字符编码、内容类型和文件名,并将文本内容写入响应流中,最终通过浏览器下载该文件。

具体解析如下:
1. 方法声明为`public static`,返回类型为`void`,接受三个参数:`HttpServletResponse response`,`String text`,`String fileName`。
2. 在方法内部,首先设置响应的字符编码为UTF-8,以确保支持中文等非ASCII字符。
3. 设置响应的内容类型为纯文本(text/plain)。
4. 通过`response.addHeader()`方法设置响应头部信息,其中包括设置文件名和格式,使用了一个名为`genAttachmentFileName()`的工具方法生成文件名。
5. 创建一个`BufferedOutputStream`对象和一个`ServletOutputStream`对象,分别用于缓冲和输出文本内容。
6. 将文本内容以UTF-8编码转换为字节数组,然后通过`buff.write()`方法将字节数组写入缓冲输出流。
7. 调用`buff.flush()`方法将缓冲区的数据刷新到输出流,并关闭缓冲输出流。
8. 在异常处理块中,捕获异常并抛出自定义的`GlobalException`异常,传递错误信息。
9. 最后,使用`finally`块关闭缓冲输出流和输出流,确保资源的释放。

请注意,上述代码中使用了一些未提及的自定义工具类和方法,如`ExportUtils.genAttachmentFileName()`,可以根据具体实现进行调整。另外,还可能需要导入相关的包和处理异常的代码。

2、导出json文件

 public static void exportJson(HttpServletResponse response, String text, String fileName) {
        response.setCharacterEncoding("utf-8");
        //设置响应的内容类型
        response.setContentType("text/plain");
        //设置文件的名称和格式
        response.addHeader("Content-Disposition", "attachment;filename="
            + ExportUtils.genAttachmentFileName(fileName, "MODEL-DATA")//设置名称格式,没有这个中文名称无法显示
            + ".json");
        BufferedOutputStream buff = null;
        ServletOutputStream outStr = null;
        try {
            outStr = response.getOutputStream();
            buff = new BufferedOutputStream(outStr);
            buff.write(text.getBytes("UTF-8"));
            buff.flush();
            buff.close();
        } catch (Exception e) {
            //LOGGER.error("导出文件文件出错:{}",e);
            throw new GlobalException("导出文件文件出错:" + e.getMessage());
        } finally {
            try {
                buff.close();
                outStr.close();
            } catch (Exception e) {
                //LOGGER.error("关闭流对象出错 e:{}",e);
                throw new GlobalException("关闭流对象出错:" + e.getMessage());
            }
        }
    }

解析:

这段代码与前面的代码非常相似,也是一个用于导出文件的Java方法,不同之处在于输出的文件格式为JSON。

具体解析如下:
1. 该方法名为`exportJson`,返回类型为`void`,接受三个参数:`HttpServletResponse response`,`String text`,`String fileName`。
2. 在方法内部,首先设置响应的字符编码为UTF-8,以确保支持中文等非ASCII字符。
3. 设置响应的内容类型为纯文本(text/plain)。
4. 通过`response.addHeader()`方法设置响应头部信息,其中包括设置文件名和格式,使用了一个名为`genAttachmentFileName()`的工具方法生成文件名。
5. 创建一个`BufferedOutputStream`对象和一个`ServletOutputStream`对象,分别用于缓冲和输出文本内容。
6. 将文本内容以UTF-8编码转换为字节数组,然后通过`buff.write()`方法将字节数组写入缓冲输出流。
7. 调用`buff.flush()`方法将缓冲区的数据刷新到输出流,并关闭缓冲输出流。
8. 在异常处理块内,捕获异常并抛出自定义的`GlobalException`异常,传递错误信息。
9. 最后,在`finally`块中通过`buff.close()`和`outStr.close()`方法关闭缓冲输出流和输出流,确保资源的释放。

与前面的代码类似,可能需要根据具体实现调整未提及的自定义工具类和方法,导入相关的包,并完成异常处理的代码。

3、生成附件文件名(对应1、2中genAttachmentFileName方法)

    public static String genAttachmentFileName(String cnName, String defaultName) {
        try {
            cnName = new String(cnName.getBytes("gb2312"), "ISO8859-1");
        } catch (Exception e) {
            cnName = defaultName;
        }
        return cnName;
    }

解析:

这段代码是一个用于生成附件文件名的工具方法,接受两个参数:`cnName`和`defaultName`,并返回生成的文件名字符串。

具体解析如下:
1. 方法名为`genAttachmentFileName`,返回类型为`String`,接受两个参数:`cnName`和`defaultName`。
2. 首先尝试将`cnName`从gb2312编码转换为ISO8859-1编码。此处使用`cnName.getBytes("gb2312")`将`cnName`的字节数组按照gb2312编码获取,然后使用`new String(bytes, "ISO8859-1")`将字节数组重新按照ISO8859-1编码生成字符串。
3. 如果转换过程中出现异常(可能是因为`cnName`不支持gb2312编码),则将`cnName`赋值为`defaultName`。
4. 最后返回生成的文件名字符串,可能是经过编码转换的`cnName`,或者是`defaultName`。

该方法的目的是为了确保生成的文件名中包含中文字符时能够正确显示,因为某些文件系统和操作系统对于文件名的编码支持不同。在这里,如果`cnName`能够正常转换为ISO8859-1编码,则将其作为文件名返回;否则,将使用默认的`defaultName`作为文件名返回。

需要注意的是,这段代码涉及到对异常的处理,但没有具体的异常处理逻辑。在实际使用时,可能需要根据具体场景进行异常处理。

;