連線並登入到 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 指令碼。