Java FTP下载示例– Apache Commons Net

时间:2020-02-23 14:36:36  来源:igfitidea点击:

今天,我们将研究使用Apache Commons Net API的Java FTP下载文件示例。
几天前,我写了一篇关于如何使用Apache Commons Net API通过FTP上传文件的文章。
其中我们将学习如何使用apache commons Net API从FTP服务器下载文件。

Java FTP下载

package com.theitroad.files;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

public class FTPDownloader {

  FTPClient ftp = null;

  public FTPDownloader(String host, String user, String pwd) throws Exception {
      ftp = new FTPClient();
      ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
      int reply;
      ftp.connect(host);
      reply = ftp.getReplyCode();
      if (!FTPReply.isPositiveCompletion(reply)) {
          ftp.disconnect();
          throw new Exception("Exception in connecting to FTP Server");
      }
      ftp.login(user, pwd);
      ftp.setFileType(FTP.BINARY_FILE_TYPE);
      ftp.enterLocalPassiveMode();
  }

  public void downloadFile(String remoteFilePath, String localFilePath) {
      try (FileOutputStream fos = new FileOutputStream(localFilePath)) {
          this.ftp.retrieveFile(remoteFilePath, fos);
      } catch (IOException e) {
          e.printStackTrace();
      }
  }

  public void disconnect() {
      if (this.ftp.isConnected()) {
          try {
              this.ftp.logout();
              this.ftp.disconnect();
          } catch (IOException f) {
              //do nothing as file is already downloaded from FTP server
          }
      }
  }

  public static void main(String[] args) {
      try {
          FTPDownloader ftpDownloader =
              new FTPDownloader("ftp_server.theitroad.local", "[email protected]", "ftpPassword");
          ftpDownloader.downloadFile("sitemap.xml", "/Users/hyman/tmp/sitemap.xml");
          System.out.println("FTP File downloaded successfully");
          ftpDownloader.disconnect();
      } catch (Exception e) {
          e.printStackTrace();
      }
  }
}

在上面的程序构造函数中,我们正在创建FTP连接,然后使用downloadFile()方法将位于FTP服务器上的文件下载到本地系统。
FTPClientretrieveFile()方法用于从FTP服务器下载文件。

请注意,远程文件路径应相对于FTP用户主目录。

这是上述FTP下载文件示例程序的输出。

220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------
220-You are user number 1 of 50 allowed.
220-Local time is now 01:39. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 15 minutes of inactivity.
USER [email protected]
331 User [email protected] OK. Password required
PASS ftpPassword
230 OK. Current restricted directory is /
TYPE I
200 TYPE is now 8-bit binary
PASV
227 Entering Passive Mode (50,116,65,161,255,56)
RETR sitemap.xml
150-Accepted data connection
150 1427.4 kbytes to download
226-File successfully transferred
226 1.900 seconds (measured here), 0.73 Mbytes per second
FTP File downloaded successfully
QUIT
221-Goodbye. You uploaded 0 and downloaded 1428 kbytes.
221 Logout.