begin process at 2012 02 11 14:46:31
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Reseaux et Internet

 > FTPCONNECTION (ACTIF, PASSIF, RESUME, DOWNLOAD, ETC...)

FTPCONNECTION (ACTIF, PASSIF, RESUME, DOWNLOAD, ETC...)


 Information sur la source

Note :
9,17 / 10 - par 6 personnes
9,17 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Reseaux et Internet Niveau :Débutant Date de création :28/04/2004 Date de mise à jour :28/04/2004 18:08:44 Vu / téléchargé :23 596 / 4 010

Auteur : Nicocyno

Ecrire un message privé
Site perso
Commentaire sur cette source (33)
Ajouter un commentaire et/ou une note

 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

  • 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();
  • }
  • }
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

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

MANIPULER DES DONNÉS XML AVEC JAVA ET JDOM

 Sources de la même categorie

Source avec Zip Source avec une capture SERVEUR D'OBJET ET EXEMPLE D UTILISATION : SERVER CHAT ET SO... par GodConan
Source avec Zip Source avec une capture RÉCUPÉRER CHEMIN DOSSIER DEPUIS POSTE DISTANT VIA SOCKET. par Dariumis
Source avec Zip Source avec une capture LOCALISATEUR D'HOTE (IL SUFFIT D'ENTRE L'ADRESSE ET LE PROG ... par amateur_java
Source avec Zip COMPTEUR DE TEMPS DE CONNEXION A L'INTERNET EN RESEAU. par Tiger076
Source avec Zip SERVEUR GENERIQUE par pacifikateur

Commentaires et avis

Commentaire de SeeNapse le 29/04/2004 22:46:14

Tout simplement génial 10/10

Commentaire de frix le 09/07/2004 11:06:55

Simple et efficace,

Merci pour ce programme qui m'as bien aidé à utiliser cette classe.

Commentaire de niky_larson le 11/08/2004 00:16:54

merci pour ce code

Commentaire de silent_roma le 20/08/2004 11:57:44

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.

Commentaire de benratti le 27/08/2004 11:03:13

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....

Commentaire de AbriBus le 23/10/2004 06:35:11

J'utilise Eclipse et il me dit que FtpConnection ca existe pas... quand je regarde sur le HTML compilé de Sun, je trouve pas non plus... quequ'un peut-il m'aider ?

Commentaire de Nicocyno le 05/11/2004 19:20:34

Pour le problème de listage des fichiers, tout dépend si ton serveur accepte le mode passif ou le mode actif.

Mais dans tout les cas la class FtpConnection gère les deux.

Pour Abribus, l'exemple donné ne fonctionne que si tu importe ma class FtpConnection, c'est tout l'interet de cette source justement, le bout de code ci-dessus, n'est qu'un exemple d'utilisation de la class.

Commentaire de a52jbbm le 05/01/2005 17:34:33

question de debutant : Comment importer (syntaxe) la class FtpConnection dans TestFTP.java

merci de votre reponse et de votre comprehention pour le pauvre debutant que je suis.

Commentaire de dominion le 05/03/2005 18:44:57

J'ai un problème au niveau du login : il marche si le login est bon, sinon erreur... Quelqu'un sait me dire pourquoi ? (je suis sur un ftp free)

Commentaire de Anne Onyme le 05/03/2005 19:20:10

... dire pourquoi quand on fait comme il faut pas ca marche pas... heu... parceque pour que ca marche il faut faire comme il faut... ainsi va l'informatique...

Commentaire de dominion le 05/03/2005 19:27:09

Pas mal le raisonnement, mais normalement la fonction login devrait me retourner false... Or le programme plante ! Ya quand même une nuance non ? ;-)

Commentaire de pidjot le 20/03/2005 18:51:55

bonjour,
quelqu1 pourait me dire comment inclure c'est applet dans une page html
merci

Commentaire de benratti le 23/03/2005 17:34:22

pidjot, ce n'est pas une applet ... c'est juste une classe java qui permet la gestion de connexion FTP. Si tu veux l'utiliser dans une applet ou une application, il faut deja que tu connaisses un minimum le java, ce qui ne semble pas vraiment etre le cas car tu confonds classe et applet.

Commentaire de pidjot le 23/03/2005 18:43:59

oui c'est vrai ta raison

Commentaire de GRenard le 07/06/2005 13:53:21

Ca a l'air cool, je vais essayer ca now :)
Par contre petite erreur dans le commentaire du constructeur surchargé :
* Ainsi que le mode de connection (1-Passif et 2-Actif)
Et plus haut :
     * 0: Passif (PASV)
     * 1: Actif (PORT)

Plus bas, on voit que c'est 0 et 1
Si je ne m'abuse, il n'y a pas d'autre mode, alors pourquoi ne pas mettre un boolean passive

La partie suivante ne me lance aucune fleur, c'est eclipse qui me dit tout ca :P
Eclipse (gentil eclipse) me dit que String getFullServerReply(StringBuffer fullReply) n'est jamais appelé et que c'est private. same pour boolean isTransientNegativeResponse(int response) et boolean isPermanentNegativeResponse(int response)
localip = inetaddress.getLocalHost(); -> normalement static

La RFC du FTP (RFC959) n'indique pas comment doivent être les commandes mais elles sont toujours écrites en majuscules

Tu devrais mettre à jour la source que l'on voit parce qu'elle semble bien bien vieille celle-là.

Commentaire de GRenard le 07/06/2005 13:55:20

Pour la source à mettre à jour, j'avais juste mal regardé que c'est le test qui est affiché, alors c'est correct loll :P

Commentaire de GRenard le 07/06/2005 21:49:06

Je viens de trouver un bug (eh ouais déjà...)
Si le serveur est Windows et qu'il te retourne la liste sous format avec des \r\n eh bien ça va planter parce que t'as oublier de remplacer tes \n par lineTerm
Par contre, il faudrait trouver un moyen pour trouver automatiquement (à la fin du readline par exemple)

De plus, c'est plutôt lent faire 2 fois getdir et getFile... et en plus, dans chacun de ces 2 fonctions, on demande 2 fois la liste... perso, je modifie pour faire que avec LIST et pas NSLT

J'reviendrai si j'ai des problèmes avec le download & | upload :P

Commentaire de sheorogath le 10/06/2005 17:10:48 administrateur CS

comment tu va resoudre le bug ac les serveur windows ?
merci

Commentaire de GRenard le 10/06/2005 20:06:52

Il y a un \n qui traine, il faut le remplacer par lineTerm et mettre lineTerm par \r\n ... pour les token, j'ai regardé on a pas besoin de vérifier soit \r\n ou soit \n, il le fait par lui même...

De plus, j'ai passé ca juste en LIST et pas en NLST et LIST... c'est extrêmement lent (en plus avec java c lent à la base !)

Commentaire de sheorogath le 26/06/2005 16:31:10 administrateur CS

merci mais je signale que la methode qui permet de changer de repertoire fonctionne pas ou mal chez moi
g tester deux ftp je croi et ca marche pas
vous avez une idee ?
merci

Commentaire de sheorogath le 26/06/2005 17:18:43 administrateur CS

g resolu mon bug : un .trim() peut faire des merveille ;)

Commentaire de bend80 le 18/07/2005 16:51:01

Nickel, c'est exactement ce dont javais besoin!!

Commentaire de sheorogath le 19/09/2005 18:16:12 administrateur CS

j'ai meme essaye une syntaxe comme ca :
file:///C://Documents and Settings//thomas//Bureau//

mais voila ce que me sort l'exception :

java.io.FileNotFoundException: file:\C:\Documents and Settings\thomas\Bureau (Syntaxe du nom de fichier, de répertoire ou de volume incorrecte)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(Unknown Source)
at java.io.RandomAccessFile.<init>(Unknown Source)
at FtpConnection.readDataToFile(FtpConnection.java:618)
at FtpConnection.downloadFile(FtpConnection.java:305)
at FtpIo.DownloadTo(FtpIo.java:24)
at TelechargementSimple.run(TelechargementSimple.java:15)

Commentaire de sheorogath le 19/09/2005 18:29:36 administrateur CS

finalement j'ai resolu le bug dsl pour tout ces messag mais fallait juste ajouter le nom du fichier a telecharger a la destination

Commentaire de cthu77 le 15/03/2007 17:00:52

Merci bien pour cette classe qui va me faire gagner bien du temps...

petite remarque concernant la méthode InetAddress.getLocalHost() qui devrait être appelé de manière statique pour héviter un warning à la compilation :)

Commentaire de rgiard le 24/07/2007 12:02:28

Bonjour une question assez urgente : je souhaiterai utiliser un proxy ftp pour les connexion au ftp comment puis-je faire cela ?

Commentaire de Children le 03/08/2007 19:10:27

Bien ,voilà je meprésente,je programme en visualbasic et en connais rien du tout à  Java, j'aimerais mettre se code sur mon site, quelqu'un pourrait m'expliquer comment faire et créer un applet je présume...
                          Toute réponse sont les bienvenue et j'en     remercie à l'avance leurs auteurs.

Commentaire de flolag le 26/05/2008 14:15:48

Je n'arrive pas à transférer un fichier pourtant j'ai fait ftpVariable.uploadFile("/test/", "C:\\essai.jpg"); je n'ai aucun message d'erreur mais je ne trouve pas mon fichier sur le serveur.
Quelqu'un aurait-il une solution ?
Merci

Commentaire de aiglefin0123 le 27/07/2010 22:11:21

C'est pile poile ce que je cherchais je le teste et je reviens

Commentaire de aiglefin0123 le 11/08/2010 21:08:42

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

Commentaire de chat11 le 12/02/2011 15:01:21

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.

Commentaire de dgueul le 23/05/2011 10:07:49

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!

Commentaire de dgueul le 23/05/2011 11:45:42

Bon, le problème est résolu, c'était les outputStream.println() qui mettaient le bazar!

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,725 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales