闰年的2月29日commons net中ftpclient listFiles获取文件为null问题解析

在2020年2月29日,使用commons-net-1.4.1.jar的FTPClient进行文件下载时,listFiles()返回null并抛出NPE。经过排查,发现是由于旧版本包处理日期的bug,升级到commons-net-3.1.jar或修改文件时间戳即可解决问题。问题的根源在于1.4.1版本对无年份的日期解析错误。
摘要由CSDN通过智能技术生成

一、2020年2月29日问题描述

  1. 像往常一样,我们的一个定时任务从服务器A通过FTP方式连接到服务器B和服务器C下载日期为20200229的文件,loginin,cd 都是成功的,但是到执行FTPClient.listFiles()方法时返回的文件列表为null,同时从日志看,报了NPE(NullPointerException空指针异常)。但手动登录到服务器B和C时,发现想下载的文件是存在且有内容的!
  2. 从服务器B FTP到服务器A,通过FTPClient.listFiles()方法查看文件指定文件,开始都是可以正常获取到文件,但FTP上传覆盖了一次这个文件之后,再通过FTPClient.listFiles()方法获取该文件,就获取不到了。但是,同路径下的另一个文件,仍然可以获取到。

二、问题分析历程

  1. 与网络部确认,网络策略近一段时间都没有任何变动
  2. 与所有相关开发人员确认,近期没有上线操作
  3. 确认文件存在后,手动重复执行下载任务代码,结果仍然失败
  4. 手动FTP下载文件全部可以成功,于是先手动处理了线上文件,然后再安心去排查问题
  5. 通过 /usr/sbin/lsof 排查系统句柄占用情况,总句柄数正常(不过发现了其他一些应用占用句柄情况,后面也顺便处理掉了^_^)
  6. 把有问题的应用复制到其他机器,再次执行任务,还是出现同样的问题
    以上正常排查都做完之后,问题仍然存在,于是换了一个思路去思考整个问题,今天是四年一遇的一天,会不会是工具包有BUG呢ÿ
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值