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

解决方案 »

  1.   

    FTPFile[] ftpfiles = ftp.list();
    文件数多就直接卡死。服务器上有多少文件?如果真的太多,从服务器上想想办法,建子目录,放不同的文件............
      

  2.   

    服务器是客户的,这方面不是很好改。所以才改成了
    FTPListParseEngine engine = ftpUtil.ftp.initiateListParsing();
    while(engine.hasNext()){
       FTPFile[] files = engine.getNext(25);
    这样的写法,但是现在看起来,这样的写法有时候也会卡住。而这个时候服务器上根本没多少文件。最多也就是500左右的样子。
      

  3.   

    其实我想要的,不是必须解决非要卡死的问题。而是initiateListParsing或者engine.getNext执行方法超过一定时间,比如60秒时,直接给我报个timeout异常之类的。
      

  4.   

    这个貌似是FtpClient本身的问题,解决方案:1)划分子目录,缩小文件目录规模;2)看看3.0包好使不;3)用ExecutorService+FutureTask去实现获取文件目录动作,实现超时处理。
      

  5.   

    用五楼的方案3搞定~散分散分
    只是有一个地方比较担心,因为用了inner class,导致外边儿用的FTPClient声明成了final的。有点儿小担心这个FTPclient资源就一直不释放了。