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

Entrée/Sortie Java Discussion :

FTP; Jakarta Commons.net


Sujet :

Entrée/Sortie Java

  1. #1
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 33
    Points : 79
    Points
    79
    Par défaut FTP; Jakarta Commons.net
    Bonjour,

    Je rencontre un problème en ce moment en utilisant la librairie "commons.net" et plus particulière les instances de "FTPClient".

    Je pense que c'est un problème assez classique et que quelqu'un l'a déjà rencontré.

    Sur FTP se trouve un répertoire ou un client peut déposer des fichiers. J'ai une application qui, toutes les 15 minutes, scrute le répertoire FTP pour copier dans un répertoire de travail local tous les fichiers du répertoire FTP.

    Pour cela on utilise une instance "ftp" de la classe "FTPClient" pour pouvoir se connecter au serveur FTP puis on récupère un fichier désigné par un chemin 'ftpFicPath' grâce à la commande "res = ftp.retrieveFile(ftpFicPath, fos);" où "fos" est un FileOutputStream qui permet de réaliser la copie.

    Cela fonctionne bien sauf si on essaye de transférer un fichier (sur le répertoire de travail local) qui est en cours d'écriture sur le serveur FTP.

    Exemple : un client copie un fichier de 10 MO dans le répertoire du serveur FTP; la copie sur FTP n'étant pas terminée, mon programme Java scrute ce répertoire, il découvre ce nouveau fichier et commence le transfert sans que ce fichier soit intégralement copié dans le répertoire FTP. Dans ce cas le fichier n'est pas intégralement transféré dans le répertoire de travail et aucune erreur n'est retournée.

    Je souhaiterais savoir comment détecter le fait que le fichier est en cours d'écriture sur le serveur FTP à l'aide de cette librairie. Je souhaite aussi éviter toute solution du genre : vérifier la taille du fichier à 5 secondes d'intervalle (si la taille est différente alors le fichier est en cours d'écriture) car si la taille du fichier est la même rien ne garantit que ce fichier n'a pas pu être complété durant ces 5 secondes sur le serveur FTP.

    Merci

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Je ne pense pas qu'on puisse le savoir...

    Le plus simple serait de gérer une file d'attente de traitement. Dans ce cas de figure, la question ne se pose plus.
    Ou alors, tu passes par un lock sur la fonctionalité (avec un méthode static et un bon vieux synchronize)
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 33
    Points : 79
    Points
    79
    Par défaut
    Merci pour votre réponse mais vous pouvez préciser un peu plus ?

    J'ai une personne extérieure qui dépose un fichier sur un site FTP par un quelconque client FTP. J'ai mon programme java avec une méthode statique du genre "recupererFichier()" et il suffirait que je la déclare en synchronyse pour que cela fonctione ?

    A+

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Si la méthode est "static", tu rajoutes le modificateur "synchronized" à ta méthode de transfert...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 33
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    En mettant un synchronized

    synchronized private static boolean recupererFichierFTP(FTPClient ftp, FTPFile fichier, String repFTP, String repDES)

    cela ne marche pas vraiment mieux...

    En fait je pensais que les méthodes synchronized étaient utilisées pour synchroniser des appels de méthode sur un objet lorsque celui-ci était accédé
    par plusieurs processus Java en même temps... Le fait de mettre "Synchronized" ne permet surement que de synchroniser les appels Java entre eux mais pas avec des processus externe comme un client FTP du style FileZilla ?

    Merci

  6. #6
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 33
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    Il semble effectivement qu'on ne puisse poser de verrou sur un fichier avec un client FTP (de toutes façons, il n'y a qu'à voir les commandes FTP disponibles).

    De plus suivant les serveurs FTP, il est possible d'empêcher le téléchargement d'un fichier lorsque celui-ci est en cours d'écriture (FileZilla Server).

    Cependant si on ne sait pas comment est configuré le serveur FTP, il suffit d'essayer de renommer le fichier FTP. Si le renommage fonctionne il n'est pas en écriture. Si le renommage est impossible c'est que le fichier est en écriture sur FTP et est donc locké en écriture.

    Le mieux est de renommer le fichier avec le même nom (ce qui fonctionne sur certains serveurs FTP)...

    Si vous trouvez mieux...

    Merci

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Tu pourrais comparer la taille d'un fichier sur un court délai et en déduire si le fichier est en upload.

  8. #8
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 33
    Points : 79
    Points
    79
    Par défaut
    Oui bien sur, mais le problème est toujours de définir de combien j'attends ? 10 secondes ? une minute ? est-ce suffisant s'il y a un encombrement réseau ou si la machine est saturée (trop de connexions à gérer en meme temps) ? Je préfère renommer le fichier (avec le même nom) car dans ce cas je suis sur que le fichier est complètement uploadé car si j'attends 10 secondes, même si la taille n'a pas évoluée, je n'en suis pas vraiment sûr...

    Merci

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Oui, t'as raison, si t'as les droits tente de le renommer, tu seras fixé en effet.
    Sinon en regardant vite fait la rfc de ftp, il y a une commande STATUS qui donne entre autre l'"état de toutes les connexions". Peut être y-a-t-il suffisamment d'info : http://www.iprelax.fr/ftp/ftp_rfcfr4.php#4.1.1

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/05/2011, 20h06
  2. Java FTP Apache commons net
    Par Ho(c)ine. dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 14/08/2008, 20h28
  3. [FTP API org.apache.commons.net.ftp] Commande 'Quote'
    Par JnJp28 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 30/11/2007, 12h23
  4. api commons.net.ftp : pb avec listFiles
    Par kam81 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 02/07/2007, 14h14
  5. API commons.net.ftp d'APPACHE : IOException
    Par kam81 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 20/12/2006, 09h03

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