0

Java の FTP クライアントで例外がスローされた場合に従うべき正しい手順は何ですか?つまり、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;  
}

例外が呼び出されたときに終了コマンドがヒットしません - これは問題ですか? このメソッドがヒットし続ける場合、FTP クライアントに対して何百ものアクティブな接続が開かれている可能性がありますか? それとも私は何も心配していませんか?

4

1 に答える 1

0

Move your ftp.quit() statement so it is just above the return statement

Like this:

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;  
}

Since none of your catches terminate the method, execution will continue to the ftp.quit() statement and finally return with the success result.

Optionally, you can use the finally clause at the end of the try and put the ftp.quit() statement in that.

AFAIK the choice is preferential.

于 2014-03-10T20:07:10.983 に答える