目标:从FTP客户端批量读取数据文件,并存入数据库中。
方法:
使用org.apache.commons.net.ftp.client.FtpClient 来读取文件。
使用jpa来存储。
遇到问题:
1、通过 ftpclient.
retrieveFileStream(filename)读取文件流有的为空。
解决方法:这个有好几个原因,在网上查到有很多解决方法,但是在我下载200个文件的时候,每个方法都不能完全解决。
总结一下,我所做的改动。
1、ftpclient每次调用retrieveFileStream方法后,必须显示的关闭 InputStream ,然后调用
ftpClient.completePendingCommand()方法。如果不调用方法,会出现不可预估的错误(如:下一次输入流可能为空)
2、在调用listFiles之前,调用ftpClient.enterLocalPassiveMode();方法,在每次下载完之后,
调用ftp.sendCommand("ls");以此来重置超时时间。
预防FTP连接超时,导致文件读取不全。否则的话,可能会在调用retrieveFileStream()方法后,程序假死,过一会会报连接异常,