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

Soyez le premier à donner votre avis sur cette source.

Vue 26 860 fois - Téléchargée 4 261 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

Messages postés
11
Date d'inscription
samedi 11 avril 2009
Statut
Membre
Dernière intervention
31 juillet 2012

Bon, le problème est résolu, c'était les outputStream.println() qui mettaient le bazar!
Messages postés
11
Date d'inscription
samedi 11 avril 2009
Statut
Membre
Dernière intervention
31 juillet 2012

Bonjour,
Voila un moment que je me sert de cette classe (merci) sans problème, mais depuis quelques temps je suis face à un serveur récalcitrant, impossible de se logger!

Alors, je fait des capture de trames pour voir de qui se passe, et en faite, je m'aperçois qu'une trame sur 2 est une trames vide!
J'ai l'impression que la classe envoie la trame normalement puis envoies "\n\r" dans la trame suivante!
Avec tout les serveur que j'ai rencontré ça le fait, mais les serveurs réagissent bien sauf un!

Alors certes, on pourrait dire que le serveur n'est pas cool, mais là je suis bloqué...

Si quelqu'un a une solution, je lui en serais très reconnaissant!
Messages postés
58
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
12 février 2011

Salut!j'ai essayé ton code il marche parfaitement sauf files ftp.listFiles(); et subDirs ftp.listSubdirectories();
je veux avoir la liste des fichiers du dossier ftp.
j'attends une réponse .
merci.
Messages postés
2
Date d'inscription
lundi 15 juin 2009
Statut
Membre
Dernière intervention
11 août 2010

Slut, à vous j'ai le même problème je meconnecte bien au serveur mais je n'arrive pas à faire des uploadla connexion au serveur me place à la racine j'ai donc écris ceci: ftp.uploadFile("/httpdocs","/home/aiglefin/Documents/fichier.txt") et aucun succès
Messages postés
2
Date d'inscription
lundi 15 juin 2009
Statut
Membre
Dernière intervention
11 août 2010

C'est pile poile ce que je cherchais je le teste et je reviens
Afficher les 33 commentaires

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.