java 读取导出 resources目录下的文件,导出给前端

时间:2024-10-02 07:12:55
	//导出resource下的excel模板
	@GetMapping("/export-template")
	@ApiOperationSupport(order = 9)
	@ApiOperation(value = "导出模板", notes = "导出模板")
	public void exportHaijunPingdingTemplate(HttpServletResponse response) {
		try {
			// 读取resource下的excel/测试.xlsx
			ClassPathResource resource = new ClassPathResource("excel/测试.xlsx");
			InputStream inputStream = resource.getInputStream();
			Workbook workbook = new XSSFWorkbook(inputStream);

			// 设置响应头,以附件形式下载
			response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
			response.setHeader("Content-Disposition", "attachment;filename*=utf-8'zh_cn'" + URLEncoder.encode(resource.getFilename(), "UTF-8"));
			OutputStream outputStream = response.getOutputStream();
			workbook.write(outputStream);
			workbook.close();
			outputStream.close();
			inputStream.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
  1. 整体功能概述

    • 这个 Java 方法的主要功能是从项目的resource目录下读取一个 Excel 模板文件(这里是excel/测试.xlsx),然后将这个 Excel 文件作为附件导出,供用户下载。
  2. 代码详细解释

    • 方法定义与注解部分
      • @GetMapping("/export - template"):这是一个 Spring 框架中的注解,表示这个方法会处理HTTP GET请求,请求的路径为/export - template
      • @ApiOperationSupport(order = 9)@ApiOperation(value = "导出模板", notes = "导出模板"):这两个注解可能是用于 Swagger 等 API 文档生成工具的,用于描述这个 API 的顺序、名称和功能等信息。
    • 方法体部分
      • 读取 Excel 文件
        • ClassPathResource resource = new ClassPathResource("excel/测试.xlsx");:使用ClassPathResource来定位resource目录下的excel/测试.xlsx文件。ClassPathResource是 Spring 框架提供的一个类,它可以方便地从类路径(classpath)下加载资源文件。
        • InputStream inputStream = resource.getInputStream();:获取excel/测试.xlsx文件的输入流。这样就可以读取这个文件的内容了。
        • Workbook workbook = new XSSFWorkbook(inputStream);:这里使用Apache POI库中的XSSFWorkbook类来创建一个Workbook对象,XSSFWorkbook用于处理.xlsx格式的 Excel 文件。通过传入inputStream,将 Excel 文件的内容加载到Workbook对象中,这样就可以对 Excel 文件的内容进行操作了。
      • 设置响应头,准备文件下载
        • response.setContentType("application/vnd.openxmlformats - officedocument.spreadsheetml.sheet");:设置HTTP响应的内容类型为.xlsx格式的 Excel 文件类型,这样浏览器就能识别返回的内容是一个 Excel 文件。
        • response.setHeader("Content - Disposition", "attachment;filename* = utf - 8'zh_cn'" + URLEncoder.encode(resource.getFilename(), "UTF - 8"));:设置Content - Disposition头信息,表示这是一个附件(attachment),并且指定了文件名。这里通过URLEncoder.encode对文件名进行UTF - 8编码,以确保文件名在不同的环境下正确显示。
      • 将 Excel 内容写入响应流
        • OutputStream outputStream = response.getOutputStream();:获取HTTP响应的输出流,用于将 Excel 文件的内容写回给客户端(浏览器)。
        • workbook.write(outputStream);:使用Workbook对象(这里是XSSFWorkbook)将 Excel 文件的内容写入到outputStream中,这样客户端就能接收到 Excel 文件的内容了。
      • 关闭资源
        • workbook.close();:关闭Workbook对象,释放相关的资源,如内存中的 Excel 文件结构信息等。
        • outputStream.close();:关闭HTTP响应的输出流。
        • inputStream.close();:关闭读取 Excel 文件的输入流。
    • 异常处理部分
      • catch (IOException e):捕获在文件读取、写入和流操作过程中可能出现的IOException异常,并通过e.printStackTrace();打印异常堆栈信息。这是一种简单的异常处理方式,在实际生产环境中,可能需要更完善的异常处理逻辑,比如向客户端返回特定的错误信息。