我是靠谱客的博主 单纯月亮,最近开发中收集的这篇文章主要介绍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(); }
最后
以上就是单纯月亮为你收集整理的FTP服务,retrieveFileStream方法卡住线程挂起、retrieveFileStream总是返回null的全部内容,希望文章能够帮你解决FTP服务,retrieveFileStream方法卡住线程挂起、retrieveFileStream总是返回null所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复