FTP退出连接Java中的异常

时间:2013-03-23 11:28:45

标签: java ftp ftp-client

在Java中使用Java客户端抛出异常时要遵循的正确步骤是什么,即FTP会话是否保持活动状态,或者在抛出异常时自动“退出”?

所以我有这个:

public boolean testHost(Host host, String path) {
    boolean success = false;
    try {
        FTPClient ftp = new FTPClient();
        ftp.setRemoteHost(host.getIpaddress());
        ftp.connect();
        ftp.login(host.getUsername(), host.getPassword());
        success = ftp.connected();

        if (success && path != null){
            ftp.chdir(path);
        }           
        ftp.quit();
    } catch (UnknownHostException e) {
        LOG.info("Host IPAddress cannot be reached on " + host.getIpaddress());
        success = false;
    } catch (IOException e) {
        e.printStackTrace();
        success = false;
    } catch (FTPException e) {
        success = false;
    }
    return success;  
}

当调用任何异常时,quit命令不会被命中 - 这是一个问题吗?如果此方法不断被击中,可能会有100个活动连接打开FTP客户端吗?或者我不担心什么?

1 个答案:

答案 0 :(得分:0)

移动你的ftp.quit()语句,使其高于return语句

像这样:

public boolean testHost(Host host, String path) {
    boolean success = false;
    try {
        FTPClient ftp = new FTPClient();
        ftp.setRemoteHost(host.getIpaddress());
        ftp.connect();
        ftp.login(host.getUsername(), host.getPassword());
        success = ftp.connected();

        if (success && path != null){
            ftp.chdir(path);
        }           
    } catch (UnknownHostException e) {
        LOG.info("Host IPAddress cannot be reached on " + host.getIpaddress());
        success = false;
    } catch (IOException e) {
        e.printStackTrace();
        success = false;
    } catch (FTPException e) {
        success = false;
    }
    ftp.quit();
    return success;  
}

由于您的捕获都没有终止该方法,因此执行将继续执行ftp.quit()语句,最后返回成功结果。

或者,您可以在try结束时使用finally子句并将ftp.quit()语句放入其中。

AFAIK的选择是优惠的。