导入Excel存在空行,导致NullPointerException

1.情景再现:

通过导入Excel文件,导入数据,把这个Excel中的数据处理成一个List,以方便进一步处理,每行数据对应一个List中的元素。但是在处理这个List的时候,报了NullPointerException。

2.排查过程:

下图为该Excel文件的截图,同过ctrl + end,定位到最后Excel文件使用的最后一个单元格,发现其实第三行是一个空行,只是没有数据,但是这一行是存在的,只是肉眼看不出来。所以,我以为我上传的Excel文件只有两行,其实是有三行,存在一个空行。

下图为debug模式调试结果,

导入的Excel在解析之后size=3,说明该Excel文件确实是有三行。

正是由于这个空行的存在,被解析之后,就存在一个为空的map,于是之后的处理中就报出了NullPointerException。

3.原因分析:

导致Excel数据为空的行存在的原因是我使用了delete键来删除单元格中的数据。按delete键删除选中的单元格中的数据,只会将单元格中的数据删除,但是单元格仍然存在。

而采用下图中的方式,则会删除单元格:

使用上图中的删除方式,就不会存在空白行了。

4.bug修复:

遍历一遍List,将其中为空的map删掉就可以了,之后用户再上传有空白行的Excel文件就不会有问题了。

 

 

### 解决Java中因NullPointerException导致的数据无法导入Excel的问题 当遇到`java.lang.NullPointerException`时,通常是因为程序尝试访问null对象的属性或方法。对于将数据从Java应用程序写入到Excel文件的操作,在打包成JAR并运行时可能会因为路径设置不当而导致此类异常。 #### 路径配置调整 为了防止由于相对路径引起的空指针异常,建议采用绝对路径来指定Excel文件的位置[^2]: ```java // 使用System.getProperty获取当前工作目录,并构建完整的文件路径 String basePath = System.getProperty("user.dir"); File file = new File(basePath + "/your_excel_file.xlsx"); InputStream inputStream = new FileInputStream(file); ``` 这种方法可以确保无论在哪种环境下执行JAR包,都能正确找到目标Excel文档。 #### 文件存在性验证 在读取之前先检查文件是否存在以及是否可读,从而提前捕获潜在问题而不是等到操作失败才抛出异常[^3]: ```java if (!file.exists() || !file.canRead()){ throw new FileNotFoundException("The specified Excel file does not exist or cannot be read."); } ``` #### 安全地处理资源流 使用try-with-resources语句自动管理输入/输出流关闭过程中的异常情况,减少内存泄漏风险的同时也降低了发生NPE的可能性: ```java try (InputStream is = new FileInputStream(file)){ // 进行业务逻辑... }catch(IOException e){ logger.error(e.getMessage(),e); // 记录日志以便后续排查原因 } ``` 通过以上措施可以在很大程度上规避由路径解析错误引发的`NullPointerException`,同时也提高了代码健壮性和易维护性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值