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 :

lecture de fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club Avatar de Sp4ce
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Points : 67
    Points
    67
    Par défaut lecture de fichier
    Bonjour,

    j'ai une question un peu compliqué, un comportement que j'arrive pas trop à comprendre, mais que je vais essayé d'expliquer le plus clairement possible. Accrochez vos ceintures, decollage.

    Tout d'abord j'ai un thread client qui lit un fichier (et plus tard un socket), le bufferized et le met à la dispo de mon application. Pour lire le fichier j'utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    input2 = new BufferedReader(new InputStreamReader(new FileInputStream(app.getClientPreferences().getFile())));
    tout se passe bien j'arrive à lire mon fichier et tout et tout.

    Par contre, quand je veux lire un deuxième fichier, c'est là que ça marche plus. Je vous explique ce que je fais.

    je termine mon thread de cette manière :
    j'utilise un boolean exit et si exit est à true dans la boucle de mon thread je fais this.interrupt() pour faire ensuite return;

    voila le code de mon run()

    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
     
    public void run() {
     
    	if(app.getClientPreferences().getMode() == ClientPreferences.SOCKETCONNECTION) {
    		try {
    			output.write("D\n");
    			output.flush();
    		} catch (IOException e) {
    			System.err.println("Coulnd't write to HTA");
    			return;
    		}
    	}
    	// Loops to get data from network.
    	while(true) {
    		try {
    			exitIfNeeded();
    			if(requestData())
    				setUpdated(1);
     
    			Thread.sleep(SLEEP_TIME);
    			//System.out.println("Frames: " + HumanData.frames);
    		} catch (InterruptedException e) {
    			System.err.println("Client stop");
    			return;
    		}
    	}
    }
    et le code des methode qui me servent à terminer mon thread:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public synchronized void exit(){
    	exit = true;
    }
    private synchronized void exitIfNeeded() throws InterruptedException {
    	if (exit) {
    		disconnect();
    		this.interrupt();
    	}
    }
    le bug
    quand j'ouvre un nouveau fichier, j'ai comme l'impression qu'il reprend la position où il était avant. Si je réouvre le même fichier, c'est exactement la position où il était avant et si j'en ouvre un autre, c'est un position qui je pense doit dépendre de la postion où il se trouvait dans l'autre fichier.

    les idées que j'ai
    est-ce que je quitte bien mon thread comme il faut ? (en faisant le return dans le while(true){...})
    est-ce que la manière dont j'ouvre mon fichier conserve la position indépendamment de l'object qui va ouvrir ce fichier ?

    je sais que c'est un peu fouillis comme ça, mais merci pour votre aide

  2. #2
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 346
    Points : 737
    Points
    737
    Par défaut
    Ferme tu bien ton fichier et ton imput stream après avoir lu dedans?
    Il ne vaut mieux pas garder un input stream et un fichier ouvert pendant longtemps donc ouvrir l'input stream sur le fichier, lire, fermer.

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2007
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Points : 153
    Points
    153
    Par défaut
    Il faut fermer ton File et InputStream. Par exemple (le mieux d'ailleurs) c'est de le faire dans le finally de ton try catch.

  4. #4
    Membre du Club Avatar de Sp4ce
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Points : 67
    Points
    67
    Par défaut
    bah en théorie oui parce que quand je quitte mon thread j'appelle disconnect(); donc voila le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private synchronized void disconnect() {
    	try {	
    		if(input2!=null){
    			input2.close();
    		}
    	} catch (IOException e) {
    		System.err.println("Couldn't close connection");
    	}
    }
    et puis en plus quand je relance l'ouverture d'un fichier, je recrêt un nouveau thread, alors ça devrait pas être des objet complètement nouveau et différent ?

  5. #5
    Membre du Club Avatar de Sp4ce
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Points : 67
    Points
    67
    Par défaut
    bonjour,

    en fait je suis le roi des idiots... j'avais une variable d'un de mes threads qui étaient déclaré en static et donc se propageait d'instance en instance de mon thread et engendrait cette impression de continuation de la lecture au point d'arrêt....

    Merci pour vos réponse en tout cas et dsl je reliras 7 fois de plus mon code avant de poster !

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

Discussions similaires

  1. [Windows]lecture des fichier lnk (raccourcis)
    Par Tiaps dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 21/10/2009, 20h27
  2. [jsp]lecture de fichier
    Par antigone dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 04/09/2003, 12h05
  3. [AS400][Intranet][PC] Lecture de "fichiers" AS400
    Par lando dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 16/07/2003, 12h11
  4. Lecture de fichier
    Par Watcha dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 04/03/2003, 21h43
  5. Lecture de fichiers ".WAV"...
    Par 0x4e84 dans le forum Langage
    Réponses: 2
    Dernier message: 03/09/2002, 10h43

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