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 :

Tester Plusieurs fichiers si fermé avant traitement


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut Tester Plusieurs fichiers si fermé avant traitement
    Bonjour à tous,

    Je fais une application en Swing qui ouvre lit, écrit et ferme plusieurs fichiers.

    Je veux tester en 1er lieux si mes fichiers sont ouvert ou pas, un a un.

    Genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    InputStream is1 
    InputStream is2
    InputStream is3
    InputStream is
    InputStream ist
    FileOutputStream fos
     
    Si l'un des fichiers est ouvert afficher message d'erreur
     
    Sinon faire mon traitement habituel...
     
    ...
    Je sais pas trop si c'est possible à faire.

  2. #2
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Par défaut
    Bonjour,
    si ce n'est pas ton application qui a ouvert le fichier, je vois très très difficilement comment tu pourrais savoir si oui ou non le fichier est déjà ouvert.
    Si c'est ton application qui a ouvert le fichier, tu peux faire un mécanisme de lock (exclusion mutuelle) qui signifie que le dit fichier est déjà ouvert en lecture.
    Mais bon, si une application externe, genre un navigateur, Word, ou VLC etc ... utilise déjà le fichier, je ne vois pas comment tu pourrais le savoir.
    Par exemple, l'éditeur Vim crée un fichier ".toto.txt.swp" lorsqu'on ouvre le fichier "toto.txt", d'autres éditeurs utilisent ce mécanisme aussi ... tu peux faire cela.

    Cordialement,
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  3. #3
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    En faite, quand un fichier est ouvert avec excel et que j'éxecute l'appli en swing, il m'indique cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.io.FileNotFoundException: C:\Donnees\Aide_Manager\Projection_2012_Eq2.xlsx (Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus)
    Il va dans mon catch mais... il execute d'abord le traitement.

    Moi, je désire que quand je fait le traitement, je m'assure qu'aucun des 3 fichiers n'est ouvert.

    Pour l'instant, je fais:

    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
     
    if (send1 == e.getSource()) {// si on appuie sur le 1er bouton
     
    try{
     
     
    traitement habituel...
     
     
    } catch (FileNotFoundException ex){
    				JOptionPane.showMessageDialog(this,"Le fichier Projection n'existe pas dans le répertoire ou doit-être fermé avant execution!", "Attention", JOptionPane.WARNING_MESSAGE);
    			    trace.append("ECHEC: Le fichier Projection doit-être fermé !-->Terminée avec echec !"+newline);
    			    trace.append("*************************************************************************************************");
    				ex.printStackTrace();
    			} catch (IOException ex) {
    				ex.printStackTrace();
    			} catch (InvalidFormatException ex) {
    				// TODO Auto-generated catch block
    				ex.printStackTrace();
    			} catch (ParseException ex) {
    				// TODO Auto-generated catch block
    				ex.printStackTrace();
    			}
     
    	}
     
     
     
     
    }
    Ce que je veux c'est:

    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
    if (send1 == e.getSource()) {// si on appuie sur le 1er bouton
    
    Si aucun fichier n'est ouvert par Excel {
    on ne passe pas par le traitement
    }
    Sinon, on passe par le traitement habituel.
    
    try{
    
    
    traitement habituel...
    
    
    } catch (FileNotFoundException ex){
    				JOptionPane.showMessageDialog(this,"Le fichier Projection n'existe pas dans le répertoire ou doit-être fermé avant execution!", "Attention", JOptionPane.WARNING_MESSAGE);
    			    trace.append("ECHEC: Le fichier Projection doit-être fermé !-->Terminée avec echec !"+newline);
    			    trace.append("*************************************************************************************************");
    				ex.printStackTrace();
    			} catch (IOException ex) {
    				ex.printStackTrace();
    			} catch (InvalidFormatException ex) {
    				// TODO Auto-generated catch block
    				ex.printStackTrace();
    			} catch (ParseException ex) {
    				// TODO Auto-generated catch block
    				ex.printStackTrace();
    			}
    			
    	}
    
    
    
    
    }

  4. #4
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    Aucune réponse depuis...
    J'ai peut-etre pas été clair mais j'en suis sur qu'il existe une combine pour tester si un fichier est ouvert ou pas avant de poursuivre le traitement.

    exemple peut-être avec FileOutPutStream du genre ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try {
    				FileOutputStream fOut = new FileOutputStream("C:/Donnees/Aide_Manager/Projection_2012_Eq2.xlsx");
    			} catch (FileNotFoundException e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			}

  5. #5
    Membre émérite Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Par défaut
    as-tu essayé d'utiliser les FileChannel, avec tryLock ?

  6. #6
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Par défaut
    Moi, je te redis, si c'est pour vérifier si oui ou non une autre application externe a ouvert un fichier, tu as peu de chances pour le savoir.
    Par exemple, supposons que j'ai un fichier "foo.txt", si un programme "bar" quelconque est entrain de l'utiliser, ... toi à partir de ton application Java (donc à partir de la JVM), t'as pas de moyen pour le savoir
    Le seul mécanisme que tu pourrais utiliser pour avancer, c'est de jouer sur les fichiers temporaires de lock (mutuel exclusif).
    Par exemple, si tu ouvres un fichier avec Vi, ou Word, tu as respectivement un fichier ".foot.txt" , "foot.txt#$1245" (des fichiers cachés) pour signifier que le fichier original "foot.txt" est déjà ouvert par une application.
    Mais cela implique que l'application gère cela, pas le système d'exploitation
    Donc pour résumer:
    - si le fichier en question à éditer est toujours et seulement utilisé par ton application, alors tu fais le mécanisme de lock mutuel exclusif.
    - si le fichier en question à éditer est utilisé par une application externe, la JVM ne pourra pas t'en informer, ... tu pourrais néanmoins avoir une exception en cas de conflits d'écriture ...
    Voilà.
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  7. #7
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Je ne comprends pas bien où est le problème :
    Si ta JVM lance une erreur lorsque ton fichier est ouvert avec Excel
    alors tu peux très bien faire un bout de programme avant ton traitement
    qui va essayer d'ouvrir les 3 fichiers puis les refermer.

    S'il lance une erreur c'est que le fichier est déjà ouvert.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

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

Discussions similaires

  1. [E-03]Compiler plusieurs fichiers xls (fermés) dans un seul
    Par Geprocor dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/01/2018, 16h52
  2. [XL-2003] Récupération de données de plusieurs fichiers EXCEL fermés
    Par massol dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/03/2011, 19h09
  3. Réponses: 3
    Dernier message: 14/03/2011, 14h25
  4. Traitement de plusieurs fichiers XML
    Par Katachana dans le forum Langage
    Réponses: 1
    Dernier message: 22/05/2007, 16h54
  5. Tester la presence de plusieurs fichiers
    Par Little_Goldo dans le forum Linux
    Réponses: 4
    Dernier message: 17/03/2004, 11h34

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