1

FTP4Jを使用して FTP サーバーの監視アプリケーションを作成しようとしています (コード例ではクライアントと呼ばれます)。

FTP に接続し、ログインし、ローカルでファイルを作成し、ファイルをアップロードし、ファイルをダウンロードし、ファイルが同じであることを検証し、ftp とローカルでファイルをクリーンアップして切断します。

これはすべて既に行われていますが、私の質問は、何が起こったのかをログに記録し、エラーが検出されたときに中断するにはどうすればよいですか?

私が考えることができる簡単な解決策は、前のステップが成功したかどうかを示し、成功した場合にのみ次のステップを実行するブール値を作成することでした。

StringBuilder sb = new StringBuilder();
boolean noError = true;
// Connect to FTP
try {
    client.connect(hostname, port);
} catch (Exception e) {
    noError = false;
    sb.append("failed to connect<br>");
}

//Logging in to FTP
if(noError) {
    try {
        client.login(username, password);

    } catch (Exception e) {
        noError = false;
        sb.append("failed to login<br>");
    }
}
...
// Close connection
if(client.isConnected()) {
    try {
        client.disconnect(true);
    } catch (Exception e) {
        sb.append("failed to disconnect<br>");
    }
}

私が考えることができる別の解決策は、ネストされたtry/catchでしたが、それはさらに悪いように見えました.これを行うより良い方法はありますか?

4

2 に答える 2

2

解決策は簡単です。例外をキャッチしないでください。例外がスローされてキャッチされないとすぐに、プロセス全体が停止します。または、それをキャッチして、適切なエラー メッセージを含む独自の例外に変換し、この例外をスローします。

補足: null 非許容のブール値を格納するにbooleanは、a ではなく aを使用する必要があります。Boolean

于 2012-06-07T09:03:04.750 に答える
1
StringBuilder sb = new StringBuilder();
Boolean noError = true;
// Connect to FTP
try {
    client.connect(hostname, port);
        client.login(username, password);

} catch (ConnectException ce) {
    sb.append("Couldn't connect: ");
    sb.append(ce.getMessage);
} catch (LoginException le) {
     sb.append("Couldn't login: ");
    sb.append(le.getMessage);

} finally {
if(client.isConnected()) {
    try {
        client.disconnect(true);
    } catch (Exception e) {
        sb.append("failed to disconnect<br>");
    }
}
于 2012-06-07T09:04:49.477 に答える