Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SimpleFTP断开FTP服务器连接的正确方法是什么?_Java_Ftp - Fatal编程技术网

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

Java 使用SimpleFTP断开FTP服务器连接的正确方法是什么?,java,ftp,Java,Ftp,特别是对Java来说非常陌生,使用SimpleFTP库将文件发送到服务器 似乎对SimpleFTP对象的任何方法调用都需要包含在try-catch中。那么,从服务器断开连接的正确方法是什么 例如: private void ftp() { int portNumber = 21; SimpleFTP ftp = new SimpleFTP(); try { ftp.connect("serverAddress", portNumber, "use

特别是对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();
    }

}

由于正文中的内容,此文件无法编译。如果我把它移到
try
块并最终废弃
块,它将编译。。。但是,如果我的应用程序连接到服务器,然后在执行其他任务时抛出异常,该怎么办?

用自己的try-catch块围绕断开连接调用

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

您没有提到的是,出现问题的原因是
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
实例脱离范围,那么也会清理掉所有问题。

Ah,很抱歉没有提供信息。虽然Java与C#非常相似,但有一点我并不熟悉,因为它要么不存在,要么就是我没有遇到过。由于解释较长,请将您的答案标记为:)