How do I download file from FTP server?

This example demonstrates how to download a file from FTP server. To download a file we first connect to the FTP server and then login by supplying the username and password. To download the file we call retrieveFile() method of the FTPClient object. This method takes two parameters, the remote filename and an OutputStream of the local file where the download to be saved.

package org.kodejava.example.commons.net;

import org.apache.commons.net.ftp.FTPClient;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class FTPDownloadDemo {
    public static void main(String[] args) {
        // The local filename and remote filename to be downloaded.
        String filename = "data.txt";

        FTPClient client = new FTPClient();
        try (OutputStream os = new FileOutputStream(filename)) {
            client.connect("ftp.example.org");
            client.login("admin", "admin123**");

            // Download file from FTP server.
            boolean status = client.retrieveFile(filename, os);
            System.out.println("status = " + status);
            System.out.println("reply  = " + client.getReplyString());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                client.disconnect();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

If the download process was success you will see the following output printed:

status = true
reply  = 226 Transfer complete.

Maven Dependencies

<!-- http://repo1.maven.org/maven2/commons-net/commons-net/3.6/commons-net-3.6.jar -->
<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.6</version>
</dependency>

Wayan

Programmer, runner, recreational diver, live in the island of Bali, Indonesia. Mostly programming in Java, Spring Framework, Hibernate / JPA. Support me by donating.

8 Comments

    • The download path can be defined in the FileOutputStream object. You can pass a string with a full path or you can create File object that define the full path where the download file will be stored.

  1. I tried the code but my app has stopped 🙁 The changes that I made with the code are: with the server name and login user as well as the directory for the file in the server.

    When i call this class in the mainActivity what should I send? I call it in my mainActivity like this:

    startActivity(new Intent(MainActivity.this, FTPDownloadFileDemo.class));
    

    Can you help me?

    Reply
  2. Hi Victor,

    Try to get the download status and the reply code from the FTP server by adding the following code. This will show if the download process success or failed.

    boolean status = client.retrieveFile(filename, os);
    System.out.println("status = " + status);
    System.out.println("reply  = " + client.getReplyString());
    
    Reply

Leave a Reply