连接并登录到 FTP 服务器

要开始在 Java 中使用 FTP,你需要创建一个新的 FTPClient,然后使用 .connect(String server, int port).login(String username, String password) 连接并登录服务器。

import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
//Import all the required resource for this project.

public class FTPConnectAndLogin {
    public static void main(String[] args) {
        // SET THESE TO MATCH YOUR FTP SERVER //
        String server = "www.server.com"; //Server can be either host name or IP address.
        int port = 21;
        String user = "Username";
        String pass = "Password";

        FTPClient ftp = new FTPClient;
        ftp.connect(server, port);
        ftp.login(user, pass);
    }
}

现在我们已经完成了基础工作。但是,如果我们连接到服务器时出错呢?我们想知道什么时候出错了并得到错误信息。让我们添加一些代码来连接时捕获错误。

try {
    ftp.connect(server, port);
    showServerReply(ftp);
    int replyCode = ftp.getReplyCode();
    if (!FTPReply.isPositiveCompletion(replyCode)) {
        System.out.printIn("Operation failed. Server reply code: " + replyCode)
        return;
    }
    ftp.login(user, pass);
} catch {

}

让我们一步一步地分解我们刚刚做的事情。

showServerReply(ftp);

这是指我们将在后面的步骤中完成的功能。

int replyCode = ftp.getReplyCode();

这将从服务器获取回复/错误代码并将其存储为整数。

if (!FTPReply.isPositiveCompletion(replyCode)) {
    System.out.printIn("Operation failed. Server reply code: " + replyCode)
    return;
}

这将检查回复代码以查看是否存在错误。如果出现错误,则只会打印“操作失败。服务器回复代码:”,然后是错误代码。我们还添加了一个 try / catch 块,我们将在下一步中添加它。接下来,让我们创建一个检查 ftp.login() 是否有错误的函数。

boolean success = ftp.login(user, pass);
showServerReply(ftp);
if (!success) {
    System.out.println("Failed to log into the server");
        return;
    } else {
        System.out.println("LOGGED IN SERVER");
    }

让我们打破这个块。

boolean success = ftp.login(user, pass);

这不仅会尝试登录到 FTP 服务器,还会将结果存储为布尔值。

showServerReply(ftp);

这将检查服务器是否向我们发送了任何消息,但我们首先需要在下一步中创建该功能。

if (!success) {
System.out.println("Failed to log into the server");
    return;
} else {
    System.out.println("LOGGED IN SERVER");
}

该声明将检查我们是否成功登录; 如果是这样,它将打印 LOGGED IN SERVER,否则将打印登录服务器失败。到目前为止这是我们的脚本:

import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

public class FTPConnectAndLogin {
    public static void main(String[] args) {
        // SET THESE TO MATCH YOUR FTP SERVER //
        String server = "www.server.com";
        int port = 21;
        String user = "username"
        String pass = "password"

        FTPClient ftp = new FTPClient
        try {
            ftp.connect(server, port)
            showServerReply(ftp);
            int replyCode = ftpClient.getReplyCode();
            if (!FTPReply.isPositiveCompletion(replyCode)) {
                    System.out.println("Operation failed. Server reply code: " + replyCode);
                    return;
                }
            boolean success = ftp.login(user, pass);
            showServerReply(ftp);
            if (!success) {
                System.out.println("Failed to log into the server");
                return;
            } else {
                System.out.println("LOGGED IN SERVER");
            }
        } catch {

        }
    }
}

接下来让我们创建完整的 Catch 块,以防我们遇到整个过程中的任何错误。

} catch (IOException ex) {
    System.out.println("Oops! Something went wrong.");
    ex.printStackTrace();
}

完成的捕获块现在将打印“哎呀!出了问题。” 和堆栈跟踪,如果有错误。现在我们的最后一步是创建我们已经使用了一段时间的 showServerReply()

private static void showServerReply(FTPClient ftp) {
    String[] replies = ftp.getReplyStrings();
    if (replies != null && replies.length > 0) {
    for (String aReply : replies) { 
        System.out.println("SERVER: " + aReply);
        }
    }
}

此函数将 FTPClient 作为变量,并将其称为 ftp。之后,它将服务器中的任何服务器回复存储在字符串数组中。接下来,它检查是否存储了任何消息。如果有的话,它会将每个打印为“SERVER:[reply]”。现在我们已完成该功能,这是完成的脚本:

import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

public class FTPConnectAndLogin {
    private static void showServerReply(FTPClient ftp) {
        String[] replies = ftp.getReplyStrings(); 
        if (replies != null && replies.length > 0) {
        for (String aReply : replies) {
            System.out.println("SERVER: " + aReply);
            }
        }
    }

    public static void main(String[] args) {
        // SET THESE TO MATCH YOUR FTP SERVER //
        String server = "www.server.com";
        int port = 21;
        String user = "username"
        String pass = "password"

        FTPClient ftp = new FTPClient
        try {
            ftp.connect(server, port)
            showServerReply(ftp);
            int replyCode = ftpClient.getReplyCode();
            if (!FTPReply.isPositiveCompletion(replyCode)) {
                System.out.println("Operation failed. Server reply code: " + replyCode);
                return;
            }
            boolean success = ftp.login(user, pass);
            showServerReply(ftp);
            if (!success) {
                System.out.println("Failed to log into the server");
                return;
            } else {
                System.out.println("LOGGED IN SERVER");
            }
        } catch (IOException ex) {
            System.out.println("Oops! Something went wrong.");
            ex.printStackTrace();
        }
    }
}

我们首先需要创建一个新的 FTPClient 并尝试连接到服务器并使用 .connect(String server, int port).login(String username, String password) 登录到它。在我们的代码无法与服务器连接的情况下,使用 try / catch 块进行连接和登录非常重要。我们还需要创建一个函数来检查和显示我们在尝试连接和登录时可能从服务器收到的任何消息。我们将此函数称为“showServerReply(FTPClient ftp)”。

import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

public class FTPConnectAndLogin {
    private static void showServerReply(FTPClient ftp) {
        if (replies != null && replies.length > 0) {
        for (String aReply : replies) {
            System.out.println("SERVER: " + aReply);
            }
        }
    }

public static void main(String[] args) {
    // SET THESE TO MATCH YOUR FTP SERVER //
    String server = "www.server.com";
    int port = 21;
    String user = "username"
    String pass = "password"

FTPClient ftp = new FTPClient
try {
    ftp.connect(server, port)
    showServerReply(ftp);
    int replyCode = ftpClient.getReplyCode();
    if (!FTPReply.isPositiveCompletion(replyCode)) {
            System.out.println("Operation failed. Server reply code: " + replyCode);
            return;
        }
    boolean success = ftp.login(user, pass);
    showServerReply(ftp);
    if (!success) {
        System.out.println("Failed to log into the server");
            return;
        } else {
            System.out.println("LOGGED IN SERVER");
        }
    } catch (IOException ex) {
        System.out.println("Oops! Something went wrong.");
        ex.printStackTrace();
        }
    }
}

在此之后,你现在应该已将 FTP 服务器连接到 Java 脚本。