zhaowentao13 2008-06-24 21:27
浏览 254
已采纳

commons-net ftp 中 ftp.listFiles() 方法返回值不正确

我在用commons-net包处理ftp时,在一个循环中调用[code="java"]ftp.listFiles() [/code]返回当前目录下的所有文件。
奇怪的是程序第一次调用[code="java"]ftp.listFiles() [/code]返回了正确的文件列表,可是后面返回的数组长度都为0,但是目录下确实是有文件的,十分不解...

[b]问题补充:[/b]
先谢谢 congjl2002 的回答,我没有执行logout(); 或disconnect();

public InputStream checkResponse(FtpSynInfo synInfo) throws IOException{
boolean boo = false;
InputStream input = null;
String respFileName = synInfo.getFileName().trim()+RESP;
boo = ftp.isFileExist(synInfo.getFilePath(),respFileName);
if(boo){
//log.debug("获取输入流....");
input = ftp.downFile(respFileName);
log.debug("获取输入流...."+input);
}
//}
return input;

}

这个方法是在循环中执行的,登陆在循环的前面执行,登出在循环的后面执行。
ftp.isFileExist()方法中调用了我上面说的ftp.listFiles() 。

现在发现 去掉这句input = ftp.downFile(respFileName);就可以了。不知为什么。
input我在外面的方法中关闭了。
[b]问题补充:[/b]
问题解决了,不能脱离文档啊。
以下是retrieveFileStream方法的说明:
“ You must close the InputStream when you finish reading from it. The InputStream itself will take care of closing the parent data connection socket upon being closed. To finalize the file transfer you must call completePendingCommand and check its return value to verify success. ”
只要在关闭流 input.close()后面加上一句
ftpClient.completePendingCommand();
就搞定了!

  • 写回答

1条回答 默认 最新

  • congjl2002 2008-06-24 21:47
    关注

    看看你是不是执行了这两个方法
    logout();
    disconnect();

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘