在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客户端吗?或者我不担心什么?
答案 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的选择是优惠的。