码迷,mamicode.com
首页 > 其他好文 > 详细

POI 3.8版本导出excel问题

时间:2015-07-14 20:28:57      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:poi   tomcat   

使用poi 3.8版本导出excel时,在本地和测试环境都是好使的,但是部署到线上环境(linux+tomcat)后直接报错,报错日志如下图:

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)
        at com.app.util.ExcelIOUtil.write(ExcelIOUtil.java:46)
        at com.app.controllers.DrivingSchoolController.download(DrivingSchoolController.java:106)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.mvc.invoke.ActionInvoker.invoke(ActionInvoker.java:75)
        at com.mvc.MvcDispatcher.service(MvcDispatcher.java:119)
        at com.mvc.MvcFilter.doFilter(MvcFilter.java:67)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        at org.apache.tomcat.util.net.AprEndpoint$SocketWithOptionsProcessor.run(AprEndpoint.java:1810)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662) 


原因是:

poi3.8默认情况下,用到的临时目录是系统自带的临时目录。

代码如下

技术分享

    /**

     * Write out this workbook to an Outputstream.

     *

     * @param stream - the java OutputStream you wish to write to

     * @exception IOException if anything can‘t be written.

     */

    public void write(OutputStream stream) throws IOException

    {

    for (SXSSFSheet sheet : _xFromSxHash.values())

    {

    sheet.flushRows();

    }

        //Save the template

        File tmplFile = File.createTempFile("poi-sxssf-template", ".xlsx");

        tmplFile.deleteOnExit();

        FileOutputStream os = new FileOutputStream(tmplFile);

        _wb.write(os);

        os.close();


        //Substitute the template entries with the generated sheet data files

        injectData(tmplFile, stream);

        tmplFile.delete();

    }


解决办法:

查看tomcat目录下temp目录是否还存在,如果没有,新建一个即可。


版权声明:本文为博主原创文章,未经博主允许不得转载。

POI 3.8版本导出excel问题

标签:poi   tomcat   

原文地址:http://blog.csdn.net/codetomylaw/article/details/46882427

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!