今天公司有需求,需要從遠程FTP服務器上下載文件到本地代碼。然后看了一下,順便做個記錄
什么是FTP呢?? 詳細百度百科
FTP 是File Transfer Protocol(文件傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用于Internet上的控制文件的雙向傳輸。同時,它也是一個應用程序(Application)。基于不同的操作系統有不同的FTP應用程序,而所有這些應用程序都遵守同一種協議以傳輸文件。在FTP的使用當中,用戶經常遇到兩個概念:"下載"(Download)和"上傳"(Upload)。"下載"文件就是從遠程主機拷貝文件至自己的計算機上;"上傳"文件就是將文件從自己的計算機中拷貝至遠程主機上。用Internet語言來說,用戶可通過客戶機程序向(從)遠程主機上傳(下載)文件。
ftp有圖形化工具,我用的是FileZilla,
下載后直接安裝,然后打開:輸入地址和密碼,用戶名連接就行,端口號不用輸。

下面是用代碼來完成下載:
package org.spring.springboot.controller;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.SocketException;
public class ContinueFTP
{
/**
* Description: 從FTP服務器下載文件
* @Version1.0
* @param url FTP服務器hostname
* @param port FTP服務器端口
* @param username FTP登錄賬號
* @param password FTP登錄密碼
* @param remotePath FTP服務器上的相對路徑
* @param fileName 要下載的文件名
* @param localPath 下載后保存到本地的路徑
* @return
*/
public static boolean downFile(
String url, //FTP服務器hostname
int port,//FTP服務器端口
String username, //FTP登錄賬號
String password, //FTP登錄密碼
String remotePath,//FTP服務器上的相對路徑
String fileName,//要下載的文件名
String localPath//下載后保存到本地的路徑
) {
boolean success = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(url, port);
//如果采用默認端口,可以使用ftp.connect(url)的方式直接連接FTP服務器
ftp.login(username, password);//登錄
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}
ftp.changeWorkingDirectory(remotePath);//轉移到FTP服務器目錄
FTPFile[] fs = ftp.listFiles();
for(FTPFile ff:fs){
if(ff.getName().equals(fileName)){
File localFile = new File(localPath+"/"+ff.getName());
OutputStream is = new FileOutputStream(localFile);
ftp.retrieveFile(ff.getName(), is);
is.close();
}
}
ftp.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}
public void testDownFile(){
try {
boolean flag = downFile("3333333", 21, "22222", "4111111111", "taodp/20171201/DLCL20161123102305",
"20161102181637805058421.jpg", "Desktop/Contents/Home/ftp");
System.out.println(flag);
} catch (Exception e) {
e.printStackTrace();
}
}
}