Lunes, 14 Julio 2014 19:38

Cliente FTP en Java

Escrito por 
Valora este artículo
(0 votos)

En esta ocasión veremos como acceder desde un programa  cliente en java, a un servidor FTP, podremos logearnos, listar nuestros directorios, archivos, eliminar etc..  En este ejemplo lo haremos desde la salida estándar de java, pero no habría problema si nos quisiéramos extender para hacerlo desde un JFrame Swing o bien desde un a pagina JSP. Para empezar antes que nada necesitamos  la librería  commons-net-2.0., que la podemos descargar desde aquí

commons-net-ftp-2.0.jar

O bien desde el sitio oficial
http://commons.apache.org/net/download_net.cgi
De paso en este sitio se encuentra toda la documentación de la misma.

Haremos uso como de costumbre de Netbeans, creamos un nuevo proyecto java y le damos el nombre de ClienteFtp

le damos el nombre al proyecto

 


Agregamos de la siguiente manera la librería a nuestro proyecto

La ubicamos y listo


Para ser más un poco mas organizados, creamos una clase de nombre ClienteFTP

le damos el nombre a nuestra clase, en este caso ClienteFTP


Y agregamos las siguientes líneas anuestra clase


package clienteftp;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPFile;
public class ClienteFTP {
private String username, password, host, directorio ;
private boolean login;
FTPClient ftpCliente;

 public ClienteFTP(String host,String username,String password){

                 this.username = username;
                 this.password = password;
             this.host     = host;
                 ftpCliente = new FTPClient();
             try {
            ftpCliente.connect(this.host);
       this.login=ftpCliente.login(this.username, this.password);
                     if(this.login){System.out.println("Login success...");}
                     else{System.out.println("Failure success...");}
            } catch (IOException e) {
                System.err.println(e.getMessage());
            }
        }

    public void setDirectorio(String directorio) throws IOException {
     ftpCliente.changeWorkingDirectory(directorio);
    }


 public List listar() throws IOException{
     List lista= new ArrayList(); // creamos una array List
     if(this.login){ // si es true
         FTPFile[] ftpFiles = ftpCliente.listFiles();
             for (FTPFile ftpFile : ftpFiles) {
                  lista.add("------"+ftpFile.getName()+"----"); //agregamos a la lista emlementos
                 }
            }else
               System.out.println("No logeado...");
     return lista;
 }

}


A continuación explicaremos las líneas más importantes


Para el constructor

                     ftpCliente.connect(this.host);

En esta linea lo que hacemos es usar el método connect(host), de la clase heredada FTPClient,  en la cual se le pasa por parámetro el nombre del servidor FTP.
               this.login=ftpCliente.login(this.username, this.password);
Asignamos a un atributo privado del tipo boolean, lo que nos devuelve el método login, con los parámetros del nombre de usuario, junto con el pass, devolverá true en caso de login exitoso, y false caso contrario.

                     if(this.login){System.out.println("Login success...");}
                     else{System.out.println("Failure success...");}

si this.login  devuelve true, mostraremos por la salida estándar el mensaje  “Login success...", caso contrario  "Failure success...")
Para este ejemplo disponemos de los siguientes métodos

public void setDirectorio(String directorio) throws IOException {
     this.changeWorkingDirectory(directorio);
    }

Lo que hace este método es cambiar el directorio actual, por otro especificado en la variable “directorio”

public List listar() throws IOException{
     List lista= new ArrayList(); // creamos una array List
     if(this.login){ // si es true
         FTPFile[] ftpFiles = this.listFiles();
             for (FTPFile ftpFile : ftpFiles) {
                  lista.add("------"+ftpFile.getName()+"----"); //agregamos a la lista emlementos
                 }
            }else
               System.out.println("No logeado...");
     return lista;
 }
}


Este método  listar, lo  que hace este método es devolver una lista con los directorios y archivos del directorio actual.

FTPFile[] ftpFiles = ftpCliente.listFiles();

En esta línea estamos pidiendo, al objeto instanciado , una lista con los archivos y directorios, atravez del método listFiles(), luego se lo asignamos a la variable  ftpFiles, que tiene que ser del tipo FTPFile[], propia de la librería  org.apache.commons.net.ftp.FTPFile (la cual ya esta importada).
Luego en nuestro main, lo único que haremos es instanciar la clase ClienteFTP,  y listar  los archivos y directorios, luego cambiaremos el directorio, y volveremos a  listars los directorios y archivos pero de ese path

Añadimos las siguientes líneas a nuestro main

package clienteftp;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Main {

    public static void main(String[] args) throws IOException {
      List lista= new ArrayList();
         ClienteFTP clie=new ClienteFTP("compujuy.com.ar","usuario", "contraseña");
             lista=clie.listar();//asignamos a lista lo q nos devuelve el metodo
             for (Object lis : lista) {//recorremos la lista
            System.out.println(lis.toString());
        }
            System.out.println(" \n CAMBIAMOS DE DIRECTORIO Y LISTAMOS \n");
         clie.setDirectorio("public_html");//cambiamos el directorio
             lista=clie.listar(); //asignamos a lista lo q nos devuelve el metodo
             for (Object lis : lista) {//recorremos la lista
            System.out.println(lis.toString());
        }
    }
}

el main nos queda asi

Lo ejecutamos y vemos la salida con el listado de archivos y directorios de compujuy.com.ar


Con esta librería se puede extender mucho mas, como eliminar, modificar etc. Directorios y archivos, para este ejemplo solo accedimos y listamos nada mas… hasta pronto.
 

Visto 529 veces

Deja un comentario

Asegúrate de llenar la información requerida marcada con (*). No está permitido el código HTML. Tu dirección de correo NO será publicada.