Java 中的 FTP

Rupam Yadav 2023年10月12日
Java 中的 FTP

FTP 或檔案傳輸協議是一種通訊協議,它允許我們將資料從伺服器傳輸到客戶端。要從 FTP 伺服器獲取檔案,我們需要配置一個客戶端與伺服器通訊。

我們將 FTP 客戶端連線到 FTP 伺服器並在下一節中獲取檔案。

在 Java 中使用 Apache Commons Library 使用 FTP 客戶端

我們需要在專案中使用以下 maven 依賴項。

<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.8.0</version>
</dependency>

為了使程式正常工作,我們需要一個使用 www.drivehq.com 建立的伺服器,它提供了一個免費的 FTP 伺服器,我們可以在這個示例中使用它。

在程式碼中建立時,我們需要來自 FTP 伺服器的憑據和主機名。我們將憑據儲存到變數中並設定要從伺服器下載的檔案路徑。

我們建立一個 FTPClient() 類的物件,並列印來自 FTP 的每個響應,我們使用 addProtocolCommandListener() 方法新增一個命令偵聽器,其中我們傳遞一個 PrintCommandListener() 物件和 PrintWriter() 物件和 System.out 在控制檯上列印訊息。

我們建立一個檔案來儲存從伺服器檢索到的資料。我們使用 File 類執行此操作,為了獲得 OutputStream 物件,我們使用 FileOutputStream 類。

我們使用帶有主機名的 connect() 方法連線到伺服器。我們的伺服器需要訪問身份驗證憑據,因此我們使用 FTPClientlogin() 方法將 userNamepassword 傳遞給它。

我們使用 getReplyCode() 函式從伺服器獲取響應程式碼來檢查連線是否成功,如果不成功,我們斷開連線。

最後,為了從 FTP 伺服器獲取檔案,我們呼叫帶有兩個引數的 retrieveFile() 方法;第一個引數是 filePath,第二個引數是複製檢索到的檔案的 outputStream

retrieveFile() 返回一個 boolean,表示檢索是否成功。如果檔案被檢索而沒有任何錯誤,我們會顯示一條訊息。

最後,我們關閉輸出流。

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

public class ExampleClass3 {
  public static void main(String[] args) {
    String ftpHost = "ftp.drivehq.com";
    String userName = "myFtpUsername";
    String password = "123456";
    String filePath = "\\testDoc.txt";

    FTPClient ftpClient = new FTPClient();
    ftpClient.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));

    try {
      File newFile = new File("testDoc.txt");
      FileOutputStream fileOutputStream = new FileOutputStream(newFile);
      OutputStream outputStream = new BufferedOutputStream(fileOutputStream);

      ftpClient.connect(ftpHost);
      ftpClient.login(userName, password);

      int getFtpClientReply = ftpClient.getReplyCode();

      if (!FTPReply.isPositiveCompletion(getFtpClientReply)) {
        ftpClient.disconnect();
      }

      boolean success = ftpClient.retrieveFile(filePath, outputStream);

      if (success)
        System.out.println("File Retrieved Successfully.");

      outputStream.close();

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

輸出:

220 Welcome to the most popular FTP hosting service! Save on hardware, software, hosting and admin. Share files/folders with read-write permission. Visit http://www.drivehq.com/ftp/;
USER myFtpUsername
331 User name ok, need password.
PASS 123456
230 User myFtpUsername logged on. Free service has restrictions and is slower.
PORT 192,168,1,97,249,233
200 Port command successful.
RETR \testDoc.txt
150 Opening BINARY mode data connection for file transfer.
226 Transfer complete
File Retrieved Successfully.
作者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn