Paginas

miércoles, 5 de enero de 2011

JAVA, Clase para enviar archivos por FTP

Cualquier inquietud no duden en preguntar...

Para el buen funcionaniento de esta clase es necesario descargar la libreria de APACHE llamada commons-net-ftp-2.0.jar
esta clase es la abstraccion del medio de envio FTP.

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPConnectionClosedException;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import router.Bin.Agentes.clSistema;
/***
 * Clase que representa el medio de envio FTP
 * @author Diego Fernando Carvajal Rodriguez
 * @version 001
 * @see ##################
 * @since 03/11/2010 - JDK 1.6
 */


public class clFtp {
    private String sUsrio;
    private String sClve;
    private String sHost;
    private int iPrto;
    private String sDscpcionError;
    private String sDrctrioFtp;
    private String sTpoArchvo;
    private String sEstndar;
    private clPlano oclPlno;
    private FTPClient client;
    private FileInputStream fis;
    private String filename;
    private boolean bEstdo;
    private FTPFile[] arftpArchvos;
    private FTPFile ftpArchvo;
    private int iTpoEnvio;// 1 == Correo; 2 == ftp
    public clFtp(){
        this.sUsrio = "";
        this.sClve = "";
        this.sHost = "";
        this.iPrto = -1;
        this.sDscpcionError = "";
        this.sDrctrioFtp = "";
        this.sTpoArchvo = "";
        this.sEstndar = "";
        this.oclPlno = new clPlano();
        this.client = new FTPClient();
        this.fis = null;
        this.filename = "";
        this.bEstdo = true;
        this.arftpArchvos = null;
        this.ftpArchvo = null;
        this.iTpoEnvio = 0;
    }
    public int getiTpoEnvio() {
        return this.iTpoEnvio;
    }
    public void setiTpoEnvio(int iTpoEnvio) {
        this.iTpoEnvio = iTpoEnvio;
    }
    public String getsClve() {
        return sClve;
    }
    public String getsEstndar() {
        return sEstndar;
    }
    public void setsEstndar(String sEstndar) {
        this.sEstndar = sEstndar;
    }
    public String getsTpoArchvo() {
        return this.sTpoArchvo;
    }
    public void setsTpoArchvo(String sTpoArchvo) {
        this.sTpoArchvo = sTpoArchvo;
    }
    public String getsDrctrioFtp() {
        return this.sDrctrioFtp;
    }
    public void setsDrctrioFtp(String sDrctrioFtp) {
        this.sDrctrioFtp = sDrctrioFtp;
    }
    public String getsDscpcionError() {
        return this.sDscpcionError;
    }
    public void setsClve(String sClve) {
        this.sClve = sClve;
    }
    public int getiPrto() {
        return this.iPrto;
    }
    public void setiPrto(int iPrto) {
        this.iPrto = iPrto;
    }
    public String getsHost() {
        return this.sHost;
    }
    public void setsHost(String sHost) {
        this.sHost = sHost;
    }
    public String getsUsrio() {
        return this.sUsrio;
    }
    public void setsUsrio(String sUsrio) {
        this.sUsrio = sUsrio;
    }
    /***
     * Metodo que envia un archivo a un cliente mediante FTP
     * @param flArchvo parametro tipo File que contiene el archivo a ser enviado
     * @param oclSstma parametro del tipo clSistema que representa el objeto cargado con la informacion del sistema
     * @return boolean true == envio exitoso; false == envio fallido
     */
    public synchronized boolean fnbEnviaArchivo(File flArchvo, clSistema oclSstma){
        this.bEstdo = true;
        try {
            this.client = new FTPClient();
            this.client.connect(this.sHost);
            this.bEstdo = this.client.login(this.sUsrio, this.sClve);
            if(this.bEstdo && FTPReply.isPositiveCompletion(this.client.getReplyCode())){
                this.filename = flArchvo.getName();
                this.fis = new FileInputStream(flArchvo.getPath());
                this.bEstdo = this.client.setFileType(FTPClient.ASCII_FILE_TYPE);
                if(this.bEstdo){
                    this.bEstdo = this.client.changeWorkingDirectory(this.sDrctrioFtp);
                    if(this.bEstdo){
                        this.bEstdo = this.client.storeFile(this.filename, this.fis);
                    }
                    this.arftpArchvos = this.client.listFiles(this.sDrctrioFtp+"\\"+this.filename);
                    if(this.arftpArchvos.length != 0){
                        this.ftpArchvo = this.arftpArchvos[0];
                        if(this.ftpArchvo.toString().trim().isEmpty()){
                            this.bEstdo = false;
                            this.sDscpcionError = "No se comprobo que el archivo "+this.filename+" llego a sudestino";
                            System.out.println("\nEXCEPCION: "+this.sDscpcionError);
                            this.oclPlno.fnExcepcion("EXCEPCION: "+this.sDscpcionError+" "+this.ftpArchvo.toString()+" clFtp:fnbEnviaArchivo:1");
                        }
                    }
                    this.client.disconnect();
                    this.fis.close();
                }
            }else{
                this.sDscpcionError = "La conexion es fallida";
                System.out.println("\nEXCEPCION: "+this.sDscpcionError);
                this.oclPlno.fnExcepcion("EXCEPCION: "+this.sDscpcionError+" clFtp:fnbEnviaArchivo:3");
                this.oclPlno.fnbMueveArchivoWin(flArchvo, oclSstma.getsDrccionRpstrio()+"noProcesado");
                this.bEstdo = false;
                this.client.disconnect();
            }
        } catch(SocketException ex){
            this.sDscpcionError = ex.getMessage();
            System.out.println("\nEXCEPCION: "+this.sDscpcionError);
            this.oclPlno.fnExcepcion("EXCEPCION: "+this.sDscpcionError+" clFtp:fnbEnviaArchivo:4");
            this.oclPlno.fnbMueveArchivoWin(flArchvo, oclSstma.getsDrccionRpstrio()+"noProcesado");
            this.bEstdo = false;
        } catch(FTPConnectionClosedException ex){
            this.sDscpcionError = ex.getMessage();
            System.out.println("\nEXCEPCION: "+this.sDscpcionError);
            this.oclPlno.fnExcepcion("EXCEPCION: "+this.sDscpcionError+" clFtp:fnbEnviaArchivo:5");
            this.oclPlno.fnbMueveArchivoWin(flArchvo, oclSstma.getsDrccionRpstrio()+"noProcesado");
            this.bEstdo = false;
        } catch (IOException ex) {
            this.sDscpcionError = ex.getMessage();
            System.out.println("\nEXCEPCION: "+this.sDscpcionError);
            this.oclPlno.fnExcepcion("EXCEPCION: "+this.sDscpcionError+" clFtp:fnbEnviaArchivo:6");
            this.oclPlno.fnbMueveArchivoWin(flArchvo, oclSstma.getsDrccionRpstrio()+"noProcesado");
            this.bEstdo = false;
        }
        return this.bEstdo;
    }
}

2 comentarios:

  1. hola

    Muy interesante tu codigo, tambien estoy trabajando con esta libreria y es estupenda. De casualidad sabes como hacer un upload o download pero con resume? es decir continuando con una carga o descarga previa desde los bytes que se habian enviado antes? si es asi agradeceria que me dieras una mano.

    Saludos

    ResponderEliminar
  2. import router.Bin.Agentes.clSistema;
    private clPlano oclPlno;
    public synchronized boolean fnbEnviaArchivo(File flArchvo, clSistema oclSstma){

    me tiene loco estos errores

    ResponderEliminar