IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Problème avec listFiles de FTPFile


Sujet :

Java

  1. #1
    Membre à l'essai
    Développeur Java
    Inscrit en
    Septembre 2013
    Messages
    5
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2013
    Messages : 5
    Par défaut Problème avec listFiles de FTPFile
    Bonjour,

    Voilà ça fait des heures que je tourne en rond. J'essaye d'obtenir la liste des fichiers sur un serveur ftp distant mais kdal.

    voici mes procédures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    //connection au serveur ftp
    public static void connect() {
     
    		try {
    			FTPClient ftp = new FTPClient();
    			ftp.connect(SERVER);
    			ftp.login(USER, PWD);
    			System.out.println("Connected to " + SERVER + ".");
    			 System.out.print(ftp.getReplyString());
    			 int reply = ftp.getReplyCode();
     
    			 if (!FTPReply.isPositiveCompletion(reply)) {
    			 ftp.disconnect();
    			 System.err.println("FTP server refused connection.");
    			 System.exit(1);
    			 }
     
    			System.out.println("ff "+ftp.getSystemType());
    		} catch (IOException e) {
     
    			e.printStackTrace();
     
    		}
    	}
     
    //recupération de la liste des fichiers
    public static FTPFile[] getFiles() {
    		FTPFile[] files=null;
    		try{
    		// List the files in the directory
    	      ftp.changeWorkingDirectory(WORK_DIR);
    	      System.out.println("Current directory is " + ftp.printWorkingDirectory());
     
    			files=ftp.listFiles();
     
    	      System.out.println( "Number of files in dir: " + files.length);
    		}catch(IOException e){
     
    		}
    		return files;
    	}
     
    //Et puis le test
    public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		FTPTools.connect();
    		FTPFile listF []=FTPTools.getFiles();
    }
    J'arrive bien à me connecté au serveur puis le printWorkingDirectory() me donne bien le repertoire escompté sauf que le files.length me retourne toujours 0.
    J'ai vérifié les permissions de mon répertoire distant c correct

    J'utilise le JDK 1.7 et le commons net 3.3.

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Quel type de serveur FTP? Tu arrive à récupérer un fichier à partir de son nom?

    LE problème de la commande LIST dans le protocole ftp, c'est qu'elle ne précise absolument pas le format de retour. Du coup, chaque serveur ftp y va un peu à sa sauce, et FTPClient essaie de comprendre la réponse comme il peu...

  3. #3
    Membre à l'essai
    Développeur Java
    Inscrit en
    Septembre 2013
    Messages
    5
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2013
    Messages : 5
    Par défaut
    Bonjour tchize_,

    merci pour ta réponse prompt,
    le serveur FTP que j'utilise est :

    ProFTPD 1.3.3c

    c'est à rien comprendre cette histoire

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Je ne vois pas comment ton code peut fonctionner : dans "getFiles()" la variable "ftp" n'est pas défini.

    A mon avis tu fais des mélanges de variable local et static... ce qui n'est pas très propre


    a++

  5. #5
    Membre à l'essai
    Développeur Java
    Inscrit en
    Septembre 2013
    Messages
    5
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2013
    Messages : 5
    Par défaut
    Slt adiGuba,
    T'a tout bon. Mais en fait j'avais juste déplace la variable ftp dans connect histoire d'indiquer la variable. C'est en fait une variable de classe et les methodes static comme getFiles et connecté l'utilise. C pas déclaré dans connecté..
    J'ai même transférer le contenu du code des procédures dans le main pour savoir s'il n'ya vaut pas de soucis avec les params et tout ça mais kdal.
    Helpppppp plizzzz

  6. #6
    Membre à l'essai
    Développeur Java
    Inscrit en
    Septembre 2013
    Messages
    5
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2013
    Messages : 5
    Par défaut
    En fait voici le code en entier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
    /* Classe de gestionnaire FTP */
    public class FTPTools {
    	private static final String WORK_DIR = "/xml/workfiles";
    	private static final String BIN_DIR = "/xml/bin";
    	private static final String MERGE_DIR = "/xml/mergedfiles";
    	private static final String SERVER = "ftp.tartampion";
    	private static final String USER = "user";
    	private static final String PWD = "pass";
     
    	private static FTPClient ftp = new FTPClient();
     
     
    	/**
             * connect permet de se connecter au serveur ftp distant
             */
    	public static void connect() {
     
    		try {
     
    			ftp.connect(SERVER);
    			ftp.login(USER, PWD);
    			System.out.println("Connected to " + SERVER + ".");
    			 System.out.print(ftp.getReplyString());
    			 int reply = ftp.getReplyCode();
     
    			 if (!FTPReply.isPositiveCompletion(reply)) {
    			 ftp.disconnect();
    			 System.err.println("FTP server refused connection.");
    			 System.exit(1);
    			 }
     
    			System.out.println("ff "+ftp.getSystemType());
    		} catch (IOException e) {
     
    			e.printStackTrace();
     
    		}
    	}
     
    	/**
             * getFiles retourne un tableau de fichiers xml distants à fusionner
             */
    	public static FTPFile[] getFiles() {
    		FTPFile[] files=null;
    		try{
    		// List the files in the directory
    	      ftp.changeWorkingDirectory(WORK_DIR);
    	      System.out.println("Current directory is " + ftp.printWorkingDirectory());
     
    			files=ftp.listFiles();
     
    	     // files = ftp.listFiles(WORK_DIR,new XMLFTPFileFilter());
     
    	      System.out.println( "Number of files in dir: " + files.length);
    		}catch(IOException e){
     
    		}
    		return files;
    	}
     
     
    	public static void disconnect() {
    		if (ftp != null) {
    			if (ftp.isConnected()) {
    				try {
    					ftp.logout();
    					ftp.disconnect();
    					System.out.println("disconnected !");
    				} catch (IOException ioe) {
    					// do nothing
    				}
    			}
     
    		}
    	}
    }
     
    /* Classe de Test */
     
    public class TestAppli {
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		FTPTools.connect();
    		FTPFile listF []=FTPTools.getFiles();
     
     
    	    for (FTPFile ftpFile : listF) {
    	      // Check if FTPFile is a regular file
    	      if (ftpFile.getType() == FTPFile.FILE_TYPE) {
    	        System.out.println("FTPFile: " + ftpFile.getName() + "; ");
    	      }
    	    }
     
     
    		FTPTools.disconnect();
     
     
     
     
    	}
     
    }

    Pourtant j'ai bien deux fichiers dans le WORK_DIR

    mais ftp.listFiles().length me retourne 0

    j'y comprend rien
    Merci

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Je devine un peu, là, mais le / au début de WORK_DIR est sûrement une mauvaise idée. Vu ta situation je suppose que ce serveur FTP n'est pas à toi mais qu'il est partagé entre des milliers d'utilisateurs, et donc, que le répertoire xml n'est pas sur la racine du système du serveur, mais à la racine de ton répertoire perso. Pas de / devant donc.

    changeWorkingDirectory() ne lance pas d'exception si on lui demande d'aller dans un répertoire qui n'existe pas, il renvoie juste false, et tu ne le vérifies pas, donc tu sais pas si ça a marché.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre à l'essai
    Développeur Java
    Inscrit en
    Septembre 2013
    Messages
    5
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2013
    Messages : 5
    Par défaut
    Merci thelvin,
    Mais j'ai aussi essayé d'enlever le / mais kdal. Par contre j'ai changé la bibliothèque commons net par ftp4j et le même code me permet d'avoir le résultat escompté. Je vais encore faire des derniers tests pour valider.

Discussions similaires

  1. problème avec smbfile.listfiles
    Par Savor dans le forum Android
    Réponses: 0
    Dernier message: 25/11/2014, 01h02
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo