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

0/5 (33 avis)

Vue 27 153 fois - Téléchargée 4 285 fois

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

Ajouter un commentaire Commentaires
SeeNapse Messages postés 33 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 18 mai 2004
29 avril 2004 à 22:46
Tout simplement génial 10/10
cs_frix Messages postés 7 Date d'inscription vendredi 19 décembre 2003 Statut Membre Dernière intervention 6 mars 2006
9 juil. 2004 à 11:06
Simple et efficace,

Merci pour ce programme qui m'as bien aidé à utiliser cette classe.
niky_larson Messages postés 1 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 11 août 2004
11 août 2004 à 00:16
merci pour ce code
silent_roma Messages postés 1 Date d'inscription vendredi 20 août 2004 Statut Membre Dernière intervention 20 août 2004
20 août 2004 à 11:57
J'aimerais bien tester... mais comment récupère-t-on le zip ?
J'ai une fenêtre "Téléchargement, cliquez ici", mais quand j'enregistre, c'est une page HTML.
benratti Messages postés 8 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 2 février 2006
27 août 2004 à 11:03
Tres bon code mais juste un petit probleme au niveau de la methode qui permet de recuperer la liste des fichiers et des sous-repertoires sur certains serveurs.... mais je suis en train de corriger ca et je posterais la correction....

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.