Home / Programmazione / Java / Listare file ricorsivamente da FTP in Java
Mattepuffo

Listare file ricorsivamente da FTP in Java

Listare file ricorsivamente da FTP in Java

Di Java e FTP ne abbiamo già parlato, ma solo lato upload.

Oggi vediamo come connetterci a un server FTP e listare in maniera ricorsiva tutti i file.

In pratica otterremo la lista di tutti i file, compresi quelli delle sottodirectory.

Prima di tutto scarichiamo la libreria Apache Commens Net e aggiungiamola al nostro progetto.

A questo punto creiamo la nostra classe per la connessione:

public class FtpConnection {

    private final FTPClient ftp;
    private ArrayList list;

    public FtpConnection() throws IOException {
        list = new ArrayList<>();
        ftp = new FTPClient();
        ftp.connect("HOST");
        ftp.login("USER", "PWD");
    }

    public void getFileList(String dir) throws IOException {
        FTPFile[] elementi = ftp.listFiles(dir);
        for (FTPFile f : elementi) {
            if (f.getName().equals(".") || f.getName().equals("..")) {
                continue;
            }
            if (f.isDirectory()) {
                String currentDir = dir + "/" + f.getName();
                getFileList(currentDir);
            } else {
                list.add(dir + "/" + f.getName());
            }
        }
    }

    public ArrayList getList() {
        return list;
    }

    public void doDisconnection() throws IOException {
        ftp.disconnect();
    }
}

In verità non c'è molto da dire.

Nel costruttore eseguiamo la connessione e il login usando le funzioni connect e login.

Nel metodo getFileList eseguiamo la scansione dei file in maniera ricorsiva; il metodo richiede un parametro che è la directory di partenza.

Per richiamare il tutto ci basta questo:

        try {
            FtpConnection ftp = new FtpConnection();
            ftp.getFileList("Volume_1");
            ArrayList list = ftp.getList();
            String[] films = list.toArray(new String[list.size()]);
            for (String s : films) {
                System.out.println(s);
            }
            ftp.doDisconnection();
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }

Enjoy!