2014-01-14 68 views
0

对Java尤其新颖,使用SimpleFTP库将文件发送到服务器。使用SimpleFTP从FTP服务器断开连接的正确方法是什么?

看起来像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,它会编译......但是如果我的应用程序连接到服务器,然后在执行其他任务时抛出异常呢?

回答

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区块。它将抛出的唯一原因是,如果套接字已经断开连接,并且在发生异常之后让实例超出范围,则同样也会清除事件。

+0

啊,对于缺乏信息感到抱歉。虽然Java与C#非常相似,但有一点我不熟悉,因为它不存在或者我没有遇到它。由于更长的解释标记你的答案:) – sab669

1

环绕断开通话与它自己的try catch块...

finally 
{ 
    if (ftp != null) { 
    try { 
     ftp.disconnect(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 
} 
相关问题