Java FTP Download
package com.journaldev.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.journaldev.com", "[email protected]", "ftpPassword");
ftpDownloader.downloadFile("sitemap.xml", "/Users/pankaj/tmp/sitemap.xml");
System.out.println("FTP File downloaded successfully");
ftpDownloader.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
In above program constructor, we are creating FTP connection and then using downloadFile()
method to download the file located on FTP server to local system. FTPClient retrieveFile()
method is used to download file from FTP server.
Note that the remote file path should be relative to the FTP user home directory.
Here is the output of the above FTP download file example program.
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.
That’s all for FTP download file example using Apache commons Net API.