特别是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
,它将编译...但是,如果我的应用程序连接到服务器,然后在执行其他任务时抛出异常怎么办? / p>
答案 0 :(得分:1)
将断开调用与其自己的try catch块...
进行环绕finally
{
if (ftp != null) {
try {
ftp.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 1 :(得分:1)
你没有提到的是你遇到问题的原因是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
实例超出范围。