日期:2014-05-20  浏览次数:20555 次

请教个关于apache的commons-net 2.0中ftpclient的问题
我的项目需要从一个ftp上读取文件列表,然后进行判断后继续处理。
最开始使用的是这样的语句
FTPFile[] ftpfiles = ftp.list();
文件数多就直接卡死。也不报超时之类的。
后来改用
FTPListParseEngine engine = ftpUtil.ftp.initiateListParsing();
while(engine.hasNext()){
  FTPFile[] files = engine.getNext(25);
//......
}
好了很多,但是有时候还是会卡死。而且这个卡死跟文件个数还没关系了。
目前无法确认卡死现象是出在initiateListParsing()这一句还是在engine.getNext(25)这句。
不知道各位有没有什么好办法,能让列出文件如果长时间得不到结果就往下继续?
多谢。

------解决方案--------------------
这方面不是很懂,帮顶一下
------解决方案--------------------
FTPFile[] ftpfiles = ftp.list();
文件数多就直接卡死。

服务器上有多少文件?如果真的太多,从服务器上想想办法,建子目录,放不同的文件............
------解决方案--------------------
这个貌似是FtpClient本身的问题,解决方案:1)划分子目录,缩小文件目录规模;2)看看3.0包好使不;3)用ExecutorService+FutureTask去实现获取文件目录动作,实现超时处理。
------解决方案--------------------
探讨
其实我想要的,不是必须解决非要卡死的问题。而是initiateListParsing或者engine.getNext执行方法超过一定时间,比如60秒时,直接给我报个timeout异常之类的。