java.lang.RuntimeException: java.io.IOException: No such file or directory at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet(SXSSFWorkbook.java:569)
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:) 558
緣由:這個問題是指 文件目錄不存在java
poi默認將導出的excel導出到系統的臨時目錄spring
我直接跟源碼貼圖apache
首先跟進這個方法 //首先跟進這個方法 public Sheet createSheet(String sheetname){ return createAndRegisterSXSSFSheet(_wb.createSheet(sheetname)); } 繼續跟進 public Sheet createSheet(String sheetname){ return createAndRegisterSXSSFSheet(_wb.createSheet(sheetname)); }SXSSFSheet createAndRegisterSXSSFSheet(XSSFSheet xSheet){ SXSSFSheet sxSheet=null; try { sxSheet=new SXSSFSheet(this,xSheet); } catch (IOException ioe) { throw new RuntimeException(ioe); } registerSheetMapping(sxSheet,xSheet); return sxSheet; }
重點解決方法:tomcat
我直接粘貼 最終解決的代碼了app
非serverlet應用用這個xss
//設置臨時目錄解決 系統回收默認 臨時文件 File file = new File("/mnt/soft/spring-boot/tomcat_basedir"); file.mkdirs(); TempFile.setTempFileCreationStrategy(new TempFile.DefaultTempFileCreationStrategy(file)); 把這段代碼放到 Sheet sh = wb.createSheet("sheet1"); 這個以前就ok了
固然網上的廣泛作法是tomcat根目錄建立temp 文件夾而這種作法也只是針對serverlet容器內調用poi輸出 ,而若是你不是那就按照個人方式來吧