使用SimpleFTP从FTP服务器断开连接的正确方法是什么?

时间:2014-01-14 20:42:27

标签: java ftp

特别是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>

2 个答案:

答案 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实例超出范围。