Ftpconnection (actif, passif, resume, download, etc...)

Description

La class FtpConnection permet de vous connecter à un serveur FTP et d'y lancer les commandes de bases (listage, récupération de la taille d'un fichier, demande de téléchargement, etc...).
Au départ cette class n'est pas de moi mais j'y ai rajouté le mode passif car certains serveurs FTP n'acceptent pas la command PORT.

Source / Exemple :


Voici un petit exemple d'utilisation:
(Le zip contient FtpConnection.java et TestFTP.java)

import java.io.*;
import java.util.*;

class TestFTP
{
   public static void main (String[] args)
   {
      String serverName;
      FtpConnection ftp = null;
		
      try
      {
         if (args.length == 0)
         {
            serverName = getStringFromUser("Entrer le nom du serveur auquel vous voulez vous connecter: ");
            if (serverName.length() == 0)  {  return;  }
         }
         else  { serverName = args[0]; }
			
         // Mettez le 1er argument à true si vous désirez afficher les messages de 
         // communication entre vous et le serveur.
         // Le deusième argument règle la méthode de connection
         // 0: Passif (PASV)
         // 1: Actif (PORT)
         ftp = new FtpConnection(false,0);
         System.out.println("Connection anonyme à " + serverName);
         ftp.connect(serverName);
			
         if (ftp.login("anonymous", "blah@blah.blah"))
         {
            System.out.println("Identification réussie !");
            System.out.println("Le type de system est: " + ftp.getSystemType());
            System.out.println("Le dossier courant est: " + ftp.getCurrentDirectory());
            String files = ftp.listFiles();
            String subDirs = ftp.listSubdirectories();
            System.out.println("Fichiers:\n" + files);
            System.out.println("Sous dosssiers:\n" + subDirs);
				
            // On essaye de passer dans le 1er sous-dossier
            StringTokenizer st = new StringTokenizer(subDirs, ftp.lineTerm);
            String sdName = "";
            if (st.hasMoreTokens())  { sdName = st.nextToken(); }
				
            if (sdName.length() > 0)
            {
               System.out.println("Changement de dossier vers: " + sdName);
               if (ftp.changeDirectory(sdName))
               {
                  // Juste pour le test, on va essayé de télécharger les 3 premiers fichiers.
                  files = ftp.listFiles();
                  st = new StringTokenizer(files, ftp.lineTerm);
						
                  String fileName;
                  int count = 1;
                  while ((st.hasMoreTokens()) && (count < 3))
                  {
                     fileName = st.nextToken();
                     System.out.println("Téléchargement de " + fileName + " vers C:\\");
                     try
                     {
                        if (ftp.downloadFile(fileName, "C:\\" + fileName))
                        {
                           System.out.println("Téléchargement réussi!");		
                        }  
                        else
                         {			
                           System.out.println("Erreur lors du Téléchargement " + fileName);
                         }
                      }
                      catch(Exception de) 
                       {
                           System.out.println("ERROR: " + de.getMessage());
                       }
                       count++;
                    }
                 }
              }  else  { System.out.println("Il n'y a pas de sous dossier!"); }
				
              ftp.logout();
              ftp.disconnect();
              System.out.println("Disconnect et loggout.");
         }  else  { System.out.println("Connection impossible :/."); }
      }
      catch(Exception e)
      {
         e.printStackTrace();
         try { ftp.disconnect(); }  catch(Exception e2)  {}
      }
   }
	
   // Fonction privée pour récupérer le nom de l'host
   private static String getStringFromUser(String prompt) throws IOException
   {
      System.out.print(prompt);
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      return br.readLine();
   }
}

Conclusion :


Voila, si vous trouvez des erreurs ou si vous avez des problèmes avec cette class:
nicolas.cynober@supinfo.com

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.