zoukankan      html  css  js  c++  java
  • 关于org.apache.poi 导出excel时引发的No such file or directory

    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)

      

    原因:这个问题是指 文件目录不存在

    poi默认将导出的excel导出到系统的临时目录

    我直接跟源码贴图

    首先跟进这个方法
    
    //首先跟进这个方法
    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;
    }

    重点解决方法

    我直接粘贴 最终解决的代码了

    非serverlet应用用这个

          //设置临时目录解决 系统回收默认 临时文件
    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输出 ,而如果你不是那就按照我的方式来吧
  • 相关阅读:
    逝者如斯夫(一)
    C#面向对象-多态
    C#基础知识1-深入理解值类型和引用类型
    一个简单的C#爬虫程序
    C# Web分页功能实现
    Web前端JS实现轮播图原理
    visual studio2019 离线MSDN文档安装
    C#中类的修饰符
    HALCON数据类型和C#对应数据类型的对比
    关于HACLON程序导出C#程序,运行报错解决方法
  • 原文地址:https://www.cnblogs.com/af826/p/14289275.html
Copyright © 2011-2022 走看看