我正在尝试使用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,但看起来更糟糕,有没有更好的方法呢?
答案 0 :(得分:2)
解决方案很简单:不要捕获异常。一旦抛出异常并且没有被捕获,整个过程就会停止。或者捕获它,但使用相应的错误消息将其转换为您自己的异常,并抛出此异常。
附注:您应该使用boolean
而不是Boolean
来存储不可为空的布尔值。
答案 1 :(得分: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>");
}
}