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 :

Connaitre la fin d'écriture d'un Fichier


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de snay13
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Par défaut Connaitre la fin d'écriture d'un Fichier
    Bonjour à tous

    Je vous expose mon problème

    J'ai un ecouteur sur un dossier qui vérifie si de nouveaux fichiers sont apparus toutes les secondes. Lorsqu'un fichier arrive je lance un traitement assez long de conversion d'image

    Mon problème est lorsque je reçoit des fichiers lourds, le fichier apparait avant la fin de son écriture et donc mon traitement se lance et plante une erreur.

    Comment puis je vérifier que mon fichier est bien complet avant de lancer mon traitement ?

    J'ai essayé de comparer le poids du fichier toutes les secondes , le hashCode mais rien n'y fait

    Une Idée??

  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
    il n'y a pas moyen de la savoir, la plupart des application n'informent même pas l'OS qu'elles ont "fini" de traiter un fichier. Ta seule solution et d'ouvrir le fichier suivant le format défini, et si le fichier ne respecte pas le format, supposer qu'il n'est pas encore prêt.

    Tu peux aussi vérifier si le fichier est verrouillé, mais il y a très peu d'applications qui écrivent en faisant ça. Sous windows -> en écriture le verrouillage est automatique, donc impossible de lire pendant que le fichier est ouvert en écriture. Sous linux il existera un fichier .lck portant le même nom que le fichier.

    Tu peu aussi voir les tutoriels et cours de formation à la programmation Java : http://java.developpez.com/cours/

  3. #3
    Membre éclairé Avatar de snay13
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Par défaut
    Merci de ta réponse

    Je m'en doutais mais jeme disais qu'il existait peut être une solution miracle

    Mais bon il faut que j'arrive tout de même à contourner le pb. Les fichiers que je recoit proviennent d'un scanner.

    Tu me dis qu'il faut que je joue avec les erreurs que j'ai ou que j'ai pas

    Je vais tenter de récupérer alors le nombre de page du fichier. Normalement si le fichier n' a pas fini d'être écrit il devrait me mettre une erreur et la je shunte le traitement.

    Je reviens après les test

  4. #4
    Membre éclairé Avatar de snay13
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Par défaut
    Après quelques test, j'arrive à le faire fonctionner mais ca me semble pas très propre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try
                        {
                                PdfReader reader = new PdfReader(liste[i]);
                                reader.close();
                        } catch (Exception e)   {     break;    }
                        createImage = new ThreadImage(liste[i], timerEcouteDossierImage);
                        createImage.execute();
    N'y a t'il vraiment aucun autre moyen que de jouer sur les erreurs?

  5. #5
    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
    déjà ne catche pas Exception, mais l'exception précise que tu veux traiter.

    Si l'api que tu utilise (itext) ne fournis pas de méthode explicite pour tester la validité d'un fichier, tu n'a pas d'autre choix que de tenter d'ouvrir et voir ce qui se passe. Maintenant ce n'est pas parce que le pdf n'est pas valide que le générateur n'a pas fini, il a peut être planté ou merdé

    Sur quel OS dois tourner l'application? Sous linux t'as éventuellement l'option de faire un "lsof | grep noDuFichier.pdf" pour voir si une autre application, possédée par le même utilisateur que ton application java, a ouvert ce fichier.

    Aussi, n'as-tu pas le controle sur le logiciel qui fait le scanning, pour savoir quand l'opération est terminée?

  6. #6
    Membre éclairé Avatar de snay13
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Par défaut
    L'application est voué à tourner sous Seven

    Les scan que je recoit proviennent de multifonction où je n'ai aucun controle si ce n'est le type de fichier le taux de compression et autre chose qui me sont inutile dans ce cas

    L'ideal serait effectivement de pouvoir tester si le fichier est utilisé puisque lorsque j'ai une erreur pour un scan assez lourd, Le message d'erreur me précise quil est en cours d'utilisation.

    Apparemment une telle fonction n'existe pas sous iText mais je continue à chercher si je ne suis passer à coté d'une méthode

    PS : Je me sers uniquement de iText pour calculer le nombre de page du fichier dans ce cas pour savoir si le fichier est complet. Sinon le traitement du fichier en image est réalisé par ghostScript

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] tracer des bordures sans connaitre la fin d'écriture
    Par grisan29 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/03/2013, 12h30
  2. [Débutant] Tester la fin d'écriture sur un fichier
    Par SmileSoft dans le forum MATLAB
    Réponses: 3
    Dernier message: 26/05/2011, 13h42
  3. fin d'écriture d'un fichier PDF
    Par bruno.rotrou dans le forum Langage
    Réponses: 2
    Dernier message: 22/05/2008, 21h25
  4. problème écriture sur un fichier
    Par drinkmilk dans le forum MFC
    Réponses: 4
    Dernier message: 24/06/2007, 00h08
  5. [JUnit] Junit écriture dans un fichier
    Par mikael35 dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 10/08/2004, 13h11

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