尤其对于Java而言,这非常新,使用SimpleFTP库将文件发送到服务器。
似乎对SimpleFTP对象的任何方法调用似乎都需要包含在try-catch中。那么,断开服务器连接的正确方法是什么?
例如:
private void ftp()
{
int portNumber = 21;
SimpleFTP ftp = new SimpleFTP();
try
{
ftp.connect("serverAddress", portNumber, "userName", "password");
ftp.bin();
ftp.cwd("dir");
ftp.stor(new File("filePath"));
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
ftp.disconnect();
}
}
由于
fianlly
正文中的内容,因此无法编译。如果我将其移至try
块并废弃finally
,它将进行编译...但是,如果我的应用程序连接到服务器,然后在执行其他任务时抛出异常怎么办? 最佳答案
您没有提到的是您遇到问题的原因是还声明了disconnect()
引发IOException
。
查看SimpleFTP
的来源,您会发现:
public synchronized void disconnect() throws IOException {
try {
sendLine("QUIT");
}
finally {
socket = null;
}
}
它所要做的就是将
QUIT
命令发送到远程FTP服务器,然后仅在其finally
块中删除对该套接字的引用。如果抛出....这意味着套接字已经死了,但是由于断开连接,您真的不在乎(如果我编写了该客户端,则由于这个原因我会捕获并忽略该异常,而不是扔了)。在您的
finally
块中,将其包装在自己的try / catch块中,并且在catch块中不执行任何操作。选项B只是将其放在try
块中。抛出该异常的唯一原因是,如果套接字已经断开连接,并且在异常发生后让SimpleFTP
实例超出范围也将清除所有内容。