Linux 系统下 POI xssfworkbook 创建时候提示权限不足

使用poi工具,下面的代码在本地环境都正常运行,new SXSSFWorkbook(new XSSFWorkbook(input));  代码部署到linux 服务上,因为用的不是root  的用户去启动jar,在调用这段代码的时候,看到了权限不足的异常

通过log 定位到,是资源的问题:

class.getResourceAsStream(srcXlsPath);

getResourceAsStream方法的参数,如果最前面是正斜杆/,那么则从项目根目录开始查找,注意是项目根目录不是磁盘根目录。

用法为:App.class.getResourceAsStream("/com/xqxx/lncms/app.txt"),App这个类可以任意替换成其他类,对结果没有影响,因为都是从根目录开始查找

如果不加正斜杆/,那么则从该方法的调用者class所在的目录查找。

用法为:App.class.getResourceAsStream("app.txt")//App.java和app.txt在同一个目录,App这个类不能随意替换成其他类

如果是在spring boot  jar 包里面,这个路径怎么去理解:

在springboot项目中,一般会将一些配置文件放在resources文件夹下, 

当java项目打成jar包,则无法以文件的形式直接获取resources中的文件,此时以流的形式获取,故此需要用getResourceAsStream这个方法

ExportUtil.class.getResourceAsStream("/exportExcelTemplate/ContractInfoWaitTemplate.xlsx")

就是获取resources 里面的 exportExcelTemplate/ContractInfoWaitTemplate.xlsx 文件

	public void getSheet() {
		try{
			InputStream input =	ExportUtil.class.getResourceAsStream(srcXlsPath);
			if(input==null){
				logger.info("模板文件:"+srcXlsPath+"不存在");
				return;
			}
			if(WDWUtil.isExcel2003(srcXlsPath)){
				wb = new HSSFWorkbook(input);
			}
			if(WDWUtil.isExcel2007(srcXlsPath)){
				
				wb = new SXSSFWorkbook(new XSSFWorkbook(input));  
				
			}
			sheet= wb.getSheet(sheetName);
		}catch(Exception e){
			logger.error("捕获异常",e);
		}
	}

回到问题的上来:

为什么会出现权限不足问题?检查了这个jar 是已经是不存在权限问题了,jar 已经是apps 777 的权限了,这样到底是那个地方的权限不够,因为模板文件是在jar 里面的,所以说不可能是模板文件的问题。

估计就是poi 内部调用了什么文件夹导致的,所以看看源代码

原因:
SXSSFWorkbook默认会在/tmp/poifiles/文件夹下创建临时文件。第一个用户创建了这个目录并运行成功了,其他用户在想往这个目录创建文件就会因为权限问题失败了。

比如我这里,是有人用root 第一次调用了这个poi 所以这个临时文件就是root 的了,

 

 

解决方案:

将/tmp/poifiles/目录权限设为777,或者是给这个临时文件修改拥有者

chown -R apps  /tmp/poifiles

chmod -R 777 /tmp/poifiles


POI会通过System.getProperty(“java.io.tmpdir”)获取tmp目录的位置,可以通过修改这个改变临时文件生成的位置。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、workbook,一个可以记录、管理、查询、统计工作日志的小工具。 2、运行在命令行模式下,不用鼠标即可完成全部操作。 3、可以记录每天的工作内容,并对工作内容可以进行增删改操作。 4、可以对工作内容进行查询和统计,比如在某一段时间内,你都做了哪些工作?这些工作各占用了你多少时间?该工作在你的工作时间内占用了多大的比例? 等等。 5、工作内容包括:工作类别、工作开始日期、工作结束日期、工作时长、工作内容 6、对每个工作内容强制进行分类,分类的类别完全自定义 7、对每个工作内容,需要提供该工作共花费了你多少时间,也就是工作时长;该时长不要求是非常精确,你可以给出一个大约值,当然,越精确越好。 也可以不提供时长,但是如果没有提供时长,则被认为该工作是没有完成的。你可以在工作还没有完成时记录一下日志,然后再完成以后记录一下时长。 8、工作的状态分为完成和未完成,完成的工作会记录完成时的日期。 9、提供登录密码功能来保护隐私安全,可以修改密码,可以初始化密码,初始密码为:123456,请及时修改密码。 10、该软件使用JAVA语言编写,数据库使用的是H2。数据文件的名称为workbookdb.h2.db,该文件记录了所有的工作日志,所以请及时备份该文件。 11、该工具不需要安装,所有文件都必须放在同一个目录下才能运行。 12、由于本工具使用JAVA语言编写,请把JRE整个文件夹拷贝到该工具的同一个目录下,再运行本工具。 13、本工具分为2个版本:windows版本、Linux版本。windows版本请运行workbook.bat;Linux版本请运行workbook.sh,如果没有权限,请赋权后执行。 14、如果有问题,欢迎在作者的博客中留言交流:http://blog.csdn.net/dbsync/article/details/11267233 运行方法:首先拷贝JRE整个目录,放到本工具的目录下,然后windows上运行workbook.bat;linux上运行workbook.sh 初始密码:123456 作者:滴石水
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值