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 :

Comment vérifier qu'un fichier est déjà ouvert ?


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Par défaut Comment vérifier qu'un fichier est déjà ouvert ?
    Bonjour,

    ma question est simple (mais je n'ai pas de réponse):
    comment vérifier qu'un fichier est déjà ouvert ?
    (pour empêcher de faire un traitement dessus alors qu'on ne peut pas le modifier...)

    Merci à vous !

  2. #2
    Membre éprouvé
    Avatar de moritan
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 687
    Par défaut
    Une solution que j'ai utilisé, c'est pas forcément la meilleur.
    J'essaye d'ouvrir un flux dessus si ça plante il est pas dispo et je boucle jusqu'a qu'il soit dispo.
    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
     
     
    while(!isFree){
                  try {
                	fileInputStream =new FileInputStream(files[0]);
    				isFree=true;
                  } catch (FileNotFoundException e) {
    				try {
    					Thread.sleep(parametrage.getSleepTimeCheckFile());//attend un temps défini dans un fichier properties avant de boucler
    				} catch (InterruptedException e1) {
    					treatError(e1,rootLogger);
    				}
                  }finally{
                	if(fileInputStream!=null){
    					try {
    						fileInputStream.close();
    					} catch (IOException e) {
    						treatError(e,rootLogger);
    					}
                	  }
                  }
               }

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Par défaut
    Je ne comprends pas très bien...
    Si j'ai bien compris, le code (une fois complété à ma manière) donne ça :
    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
    	public void maMethode() {
    		FileInputStream fileInputStream = null;
    		boolean isFree = false;
    		while (!isFree) {
    			try {
    				fileInputStream = new FileInputStream(new File(
    						"C:\\monFichier.txt"));
    				isFree = true;
    			} catch (FileNotFoundException e) {
    				try {
    					Thread.sleep(500);
    				} catch (InterruptedException e1) {
    				}
    			} finally {
    				if (fileInputStream != null) {
    					try {
    						fileInputStream.close();
    					} catch (IOException e) {
    					}
    				}
    			}
    		}
    	}
    Mais je ne comprends pas comment ça marche...
    (dsl d'être aussi nul, mais je ne vois vraiment pas...)

  4. #4
    Membre éprouvé
    Avatar de moritan
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 687
    Par défaut
    Citation Envoyé par n@n¤u
    Je ne comprends pas très bien...

    ...

    Mais je ne comprends pas comment ça marche...
    (dsl d'être aussi nul, mais je ne vois vraiment pas...)
    en fait si le fichier est en cours de modification par un autre programme, la commande new FileInputStream(...) renvoie une FileNotFoundException donc tant que je ne peut pas le manipuler je n'y touche pas et j'attend. Une fois que je peux le manipuler je continue mon traitement.
    Bien sur tu as intérêt à être sur que ton fichier existe sinon gare à la boucle infini. Tu peut aussi rajouter un système de timeout pour éviter le problème de boucle infini.

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Par défaut
    Ok, je vois mieux.

    Mais ce que je veux c'est uniquement tester si je peux le modifier ou pas.
    (si je ne peux pas, j'arrête le traitement et je préviens l'utilisateur...)

    N'y aurait-il pas une méthode plus simple ?

  6. #6
    Membre éprouvé
    Avatar de moritan
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 687
    Par défaut
    Citation Envoyé par n@n¤u
    Ok, je vois mieux.

    Mais ce que je veux c'est uniquement tester si je peux le modifier ou pas.
    (si je ne peux pas, j'arrête le traitement et je préviens l'utilisateur...)

    N'y aurait-il pas une méthode plus simple ?
    dans ce cas enlève la boucle while, dans mon cas je devait attendre c'est pour ça.

    Un simple if/else devrait fait l'affaire pour toi.
    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
    public void maMethode() {
    		FileInputStream fileInputStream = null;
    		boolean isFree = null;
    		try {
    			fileInputStream = new FileInputStream(new File("C:\\monFichier.txt"));
    			isFree = true;
    		} catch (FileNotFoundException e) {
    				isFree = false;
    		} finally {
    			if (fileInputStream != null) {
    				try {
    					fileInputStream.close();
    				} catch (IOException e) {
    				}
    			}
    		}
     
    		if(isFree)
    			System.out.println("C'est OK");
    		else
    			System.out.println("C'est mort");
     
    }

Discussions similaires

  1. [VBA-E] comment tester si un fichier est déjà ouvert?
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 35
    Dernier message: 25/01/2016, 10h34
  2. Comment vérifier si un fichier est corrompu
    Par julien_974 dans le forum C#
    Réponses: 6
    Dernier message: 24/08/2010, 18h27
  3. comment savoir si un fichier est dèjà ouvert
    Par max33370 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 20/01/2010, 08h34
  4. Réponses: 11
    Dernier message: 11/01/2008, 19h13

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