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

解决方案很简单:不要捕获异常。一旦抛出异常并且没有被捕获,整个过程就会停止。或者捕获它,但将其转换为您自己的异常,并带有适当的错误消息,然后抛出此异常。

旁注:您应该使用 aboolean而不是 aBoolean来存储不可为空的布尔值。

于 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 回答