apache FTPClient在上传时删除FTP上的文件

时间:2012-12-07 14:41:13

标签: java apache ftp

当FTP仍在上传时,另一个客户端使用(删除/移动)文件时,FTPClient(org.apache.commons.net.ftp.FTPClient)会挂起。 以下是我上传文件的代码:

    ftpClient = getFTPConnection();
    BufferedInputStream buffIn = new BufferedInputStream(inputStream);
    byte[] buffer = new byte[8192];
    OutputStream os = ftpClient.storeFileStream(filename);
    int readCount = 0;
    while ((readCount = buffIn.read(buffer)) > 0) {
        os.write(buffer, 0, readCount);
    }

    os.close();
    buffIn.close();
    inputStream.close();

    ftpClient.completePendingCommand(); //!stuck here!
    ftpClient.rename(filename, "uploadRename.txt");
    ftpClient.logout();
    ftpClient.disconnect();

当上传时删除文件时,os.write完成其工作(没关系)。但是在调用completePendingCommand()之后程序仍然卡住了。 如果我理解这一点,必须完成ftpClient.completePendingCommand()以发出第二个命令,删除它不是解决方案。 任何人都知道为什么ftpClient挂起? 如果completePendingCommand没有从ftp获得他想要的东西,我只是期望一条错误消息或超时。

由于

1 个答案:

答案 0 :(得分:0)

我尝试重现您的情况,但是当我尝试在上传过程中修改文件时,服务器回复450代码并且不允许删除文件。

顺便说一句,由于Commons-net API文档很少,您可以尝试调用ftp.getReplyCode()方法,在completePendingCommand()调用之前找出确切发生的情况。

然后,您可以匹配this table中的回复代码,并决定做什么"切换"回复代码。