poi 导出生成 java.io.IOException: No such file ordirectory

在生产环境上导出出现报错的问题,初步排查日志,发现是 

java.io.IOException: No such file ordirectory

然后查看poi导出源码:发现下面一段逻辑

 @Override
        public File createTempFile(String prefix, String suffix) throws IOException {
            // Identify and create our temp dir, if needed
            // 创建临时目录用于存放文件 
            if (dir == null)
            {
                dir = new File(System.getProperty("java.io.tmpdir"), "poifiles");
                dir.mkdir();
                if (System.getProperty("poi.keep.tmp.files") == null)
                    dir.deleteOnExit();
            }

            // Generate a unique new filename 
            File newFile = File.createTempFile(prefix, suffix, dir);

            // Set the delete on exit flag, unless explicitly disabled
            if (System.getProperty("poi.keep.tmp.files") == null)
                newFile.deleteOnExit();

            // All done
            return newFile;
        }

从代码逻辑中可以看到,创建的临时文件在{java.io.tmpdir}/poifiles 目录下

我们没有改变java.io.tmpdir的默认值,故默认/tmp。 故excel依赖的临时目录为/tmp/poifiles,而且此目录只有第一次使用时创建。后续linux服务器自动清理了一次/tmp目录,把/tmp/poifiles目录删除了。导致找不到依赖的临时目录。

windows下:AppData\Local\Temp\poifiles文件夹下,生成一个叫poi-sxssf-sheet**************的文件
Linux系统下:会在/tmp/poifiles文件下生成该临时文件

解决问题 改变目录,或者手动创建目录

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值