Excel使用apache poi下载

当用户调用这个方法时,我想要下载excel文件。 文件正在下载成功,但这是在项目的classPath中创build另一个excel文件。 任何人都可以请帮我避免这个classPath文件的创build。 提前致谢。

@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的文件的绝对path:

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

一个合理的补充是使用一个variables:

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

你当然也可以定义一个自定义variables并使用它。

因为您正在使用下面的命令创build文件

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

它会在classpath中生成文件

在下载时更好地给出文件path和相同的文件path

 File file = new File("c://Segmentdetail.xlsx");