FTP服务,retrieveFileStream方法卡住线程挂起、retrieveFileStream总是返回null

(1)在请求FTP服务进行下载文件时,需要循环遍历文件夹获取文件进行解析,但是在in = ftpClient.retrieveFileStream(file.getName());
时,输入流总是获取到null,一定要执行in.close();关闭输出流之后,再执行ftpClient.completePendingCommand();传输结束方法。
(2)本人FTP服务使用的时 window系统,在本地开发时使用的是window开发,进行远程ftp访问是没有问题的数据能够解析并且入库,但是部署到LINUX系统后,在retrieveFileStream方法出现了线程阻塞,连接ftp服务的线程挂起。在ftp连接时,ftpClient.enterLocalPassiveMode(); 设置为被动传输模式就可以解决线程挂起问题。

代码如下:
//ftp指定目录下的AEI文件夹数组
FTPFile[] ftpDirectory = ftpClient.listFiles();
//循环遍历子文件夹下的所有文件
for(int i = 0;i < ftpDirectory.length;i++) {
    //获取一个子文件夹
    FTPFile oneDirectory = ftpDirectory[i];
    //判断是否是文件夹
    if(oneDirectory.isDirectory()){
        //改变工作目录到指定目录的子文件夹
        ftpClient.changeWorkingDirectory(oneDirectory.getName());
        //获取子文件夹的所有报文
        FTPFile[] files = ftpClient.listFiles();
        //获取自目录下的报文
        for(FTPFile file : files){
                //D报文获取
                if("D".equals(file.getName().substring(0, 1))){
                    //获取输入流
                    in = ftpClient.retrieveFileStream(file.getName());
                    //根据文件名将对应输入流转换为字符流
                    br = new BufferedReader(new InputStreamReader(in));
                    //将文件名与文件内容的第一行赋予待解析报文Map,防止map的key重复,将文件内容作为key
                    filesMap.put(br.readLine(), file.getName());
                    //关闭输入流
                    in.close();
                    //ftp传输结束
                    ftpClient.completePendingCommand();
                    //添加该文件到要删除源文件的报文集合
                    delFilesList.add("\\"+oneDirectory.getName()+"\\"+file.getName());
                }
        }
        //将工作目录改回原指定目录,为了遍历下一个子文件夹
        ftpClient.changeToParentDirectory();
    }
}
//关闭ftp连接
ftpClient.disconnect();
//关闭字符缓冲输入流
if(br != null){
    br.close();
}
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值