Object FTP, download and upload file under FTP protocol, accept passive or active mode, SSL communication in test (java 1.5 ssl class)

Compatible with some FTP server  Unix, Windows, JScape server...

UFS format only (Unix File System).

Many people do not make the difference between FTP, FTPS and SFTP, here:
    - FTP  : transfert FTP with basic socket
    - FTPS : transfert FTP with SSL certificat
    - SFTP : transfert with SSH (use command SCP can transfert file like FTP)

Socks proxy parameters :
java -DsocksProxyPort=1080 -DsocksProxyHost=socks.foo.com -Djava.net.socks.username=user01 -Djava.net.socks.password=pass1234 ...

Command FTP allowed :
 ABOR ACCT ALLO CDUP CWD DELE HELP LIST MDTM MKD
 MODE NOOP PASS PASV PORT PWD QUIT REIN REST RETR
 RMD RNFR RNTO SITE SIZE SMNT STAT STOR STRU SYST
 TYPE USER FEAT
 
Command none implemented (not use):
APPE NLST STOU

Port used :
Port 21  --> FTP command port
Port 20 data port
Port 990  --> FTPS command port over TLS/SSL
Port 989 data port

Example :

    FTP m_client = null;
   
    try
    {
        m_client = new FTP("192.168.1.66", 21, System.out); // ftps in test 990
        m_client.setSocketTimeout(5000);                    // set timeout 5s
       
        m_client.setNetworkInterface("eth0");                     // defaut eth0
        m_client.setPassivMode(true);                         // defaut true
        //m_client.setSecureFTP(true);                         // defaut false
       
        // on démarre la session vers le serveur FTP
        m_client.session("test", "test");                
       
        //m_client.mode('S');                            // mode de transfert defaut 'S'
        //m_client.stru('F');                            // structure des fichiers defaut 'F'
       
        System.err.println("*** "+m_client.getWelcome());
        //m_client.cwd("/upload");                        // change dir
       
        // nom du répertoire courant
        System.err.println("---> "+m_client.pwd());
       
        //m_client.help();
        //m_client.system();
        //m_client.stat();
        //m_client.features();
       
        // liste les fichiers dans le répertoire courant ou nommé list("/upload");
        FtpFile a_fl[] = m_client.list();
        for (int i=0; i<a_fl.length; i++)
            System.err.println(((a_fl[i].isFile())? a_fl[i].getName()+" "+(a_fl[i].i_size+" ") : "<"+a_fl[i].getName()+">"));
           
   
        /*
        // début du test   
        try { m_client.dele("testx.pdf"); }
        catch (Exception dele) { }
       
        System.err.println("*** allocate 6000 bytes : "+m_client.allo(6000));

        // ATTENTION taille originale du fichier testx.pdf : 3434 bytes
        m_client.upLoad("D:\\temp\\testx.pdf");
        //m_client.upLoad("D:\\temp\\testx.pdf", 2456);
       
        System.err.println("date modif : "+m_client.modtime("testx.pdf"));
        System.err.println("size : "+m_client.size("testx.pdf"));
       
        m_client.downLoad("testx.pdf", "c:\\temp\\testx.pdf");
        //m_client.downLoad("testx.pdf", "c:\\temp\\testx.pdf", new File("c:\\temp\\testx.pdf").length());
        //m_client.downLoad("testx.pdf", "c:\\temp\\testx.pdf", 2456);
       
        // création répertoire test
        m_client.mkd("test");
        m_client.cwd("/upload/test");   
       
        m_client.upLoad("d:\\temp\\testx.pdf");
       
        // liste des fichiers dans test
        FtpFile b_fl[] = m_client.list();
        for (int i=0; i<b_fl.length; i++)
            System.err.println(((b_fl[i].isFile())? b_fl[i].getName()+" "+b_fl[i].i_size : "<"+b_fl[i].getName()+">"));
       
        // effacement du fichier testx.pdf et répertoire test ...
        m_client.dele("testx.pdf");
        m_client.cwd("/upload");
        //m_client.toParentDir();
        System.err.println("---> "+m_client.pwd());
        m_client.rmd("test");
        */
    }
    catch (Exception e)
    {
        System.err.println("FTP error : "+ e.toString());
        e.printStackTrace();
    }
    finally
    {
        // ferme la connexion au serveur FTP
        m_client.close();
       
        // exit
        System.exit(0);
    }


Source : FTP.java