java - 使用apache poi下载Excel

标签 java excel spring-boot download apache-poi

我希望当用户调用此方法时下载 Excel 文件。文件下载成功,但这正在项目的 classPath 中创建另一个 excel 文件。任何人都可以帮助我避免创建此类路径文件。 提前致谢。

@Override
    public void downloadExcel(HttpServletRequest request,HttpServletResponse response) throws IOException { 

              File file = new File("Segmentdetail.xlsx"); 

              XSSFWorkbook workbook = new XSSFWorkbook(); 
              XSSFSheet spreadsheet = workbook.createSheet("SegmentLogs Info");
              spreadsheet.setDefaultColumnWidth(20);
             .....Here is the logic for generating sheet which is quite big so iam skipping it.

             }           
             FileOutputStream out = new FileOutputStream(file);
             workbook.write(out);
             downloadFile(file,response);
             out.close();
             workbook.close();

    }

    private void downloadFile(File file, HttpServletResponse response){

        try {         
            response.setContentType("application/vnd.ms-excel");
            response.addHeader("content-disposition", "attachment; filename=Segmentdetail.xlsx");
            response.setHeader("Pragma", "public");
            response.setHeader("Cache-Control", "no-store");
            response.addHeader("Cache-Control", "max-age=0");
            FileInputStream fin = null;
            try {
                fin = new FileInputStream(file);
            } catch (final FileNotFoundException e) {
                e.printStackTrace();
            }
            final int size = 1024;
            try {
                response.setContentLength(fin.available());
                final byte[] buffer = new byte[size];
                ServletOutputStream outputStream = null;

                outputStream = response.getOutputStream();
                int length = 0;
                while ((length = fin.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, length);
                }
                fin.close();
                outputStream.flush();
                outputStream.close();
            } catch (final IOException e) {
                e.printStackTrace();
            }
        }catch (final Exception ex){
            ex.printStackTrace();
    }

}

最佳答案

使用要写入 Excel 的文件的绝对路径:

File file = new File(      "C:\\Segmentdetail.xlsx"); // windows
File file = new File("/home/usr/Segmentdetail.xlsx"); // unix    

合理的添加是使用变量:

File file = new File(System.getenv("user.home"), "Segmentdetail.xlsx");

您当然也可以定义自定义变量并使用它。

关于java - 使用apache poi下载Excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45240921/

相关文章:

java - 使用自定义 valueDeserializer 时,如何在 .properties/.yaml 中设置 ack-mode?

java - Spring Boot Actuator metric heap.used 随着每次后续的执行器/metrics api 调用而增加

java - 如何在java swing中运行ANTLR GUI?

java - 与MySQL的连接错误;无法访问

vba - Excel VBA : Date Comparison

excel - 在 VBA 中使用 SUM()

java - Vaadin Spring Boot 应用程序中的 Node.js 错误

java - String.format 不允许 int

java - 基本扑克程序 - 打印牌组

excel - 在宏按钮调用期间完成对单元格的更改