Java FTP下载文件时,一个容易被忽略的问题,导致文件下载失败。

当我们通过FTP下载文件时,一般先会切换目录,也就是

                ftpClient.changeWorkingDirectory(ftpPath);

这里有一个容易被忽视的问题。虽然我们在业务代码顶上已经提前切换了目录,等经过几个循环或者十几行代码后,如果我们直接通过文件名下载该目录下的文件,下载有可能会失败。像这种情况我们一般会认为是文件有中文或者编码不一致的问题。其实不然,这可能是FTP的目录切换失效了,以下是已经切换了目录的下载代码,这里可能会出现文件找不到的情况。

File localFile = new File(localPath + fileName);

      os = new FileOutputStream(localFile);
     
      FTPFile[] a=ftpClient.listFiles(fileName);

       if (a.length>0){
                    ftpClient.retrieveFile(fileName, os);
           }else{ ftpClient.retrieveFile(new String(fileName.getBytes(StandardCharsets.UTF_8),StandardCharsets.ISO_8859_1), os);
                            }

所以最好在下载文件方法前面,再切换一次目录也就是

File localFile = new File(localPath + fileName);

      os = new FileOutputStream(localFile);

      ftpClient.changeWorkingDirectory(ftpPath);

      FTPFile[] a=ftpClient.listFiles(fileName);

       if (a.length>0){
                    ftpClient.retrieveFile(fileName, os);
           }else{ ftpClient.retrieveFile(new String(fileName.getBytes(StandardCharsets.UTF_8),StandardCharsets.ISO_8859_1), os);
                            }

 这样就可以避免文件找不到导致文件下载失败的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值