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 d'un fichier .txt


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 104
    Points : 59
    Points
    59
    Par défaut Lecture d'un fichier .txt
    Bonjour,

    je veux lire un fichier txt en java. ma fonction java marche très bien mais le problème est le suivant :
    j'écris ma fonction dans une classe java puis j'appelle cette fonction de puis une autre classe mais malheureusement j'ai une erreur merci d'avance

    code de classe lire fichier:
    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
    36
    37
    38
    39
    40
    41
    42
    43
    package file;
     
    import java#io#BufferedReader;
    import java#io#FileInputStream;
    import java#io#InputStream;
    import java#io#InputStreamReader;
     
    public class FileManipulation 
    {
    	/**
             * Constructor of the class, */
    	/*public FileManipulation## {
    			}
    	*///lecture du fichier texte de communication
    	public String readfile ##
    	{
    		String sCurrentLine="";		
    		String chaine="";
    		String fichier ="D:/communicationfile#txt";
     
    		try
    		{
    			InputStream ips=new FileInputStream#fichier#; 
    			InputStreamReader ipsr=new InputStreamReader#ips#;
    			BufferedReader br=new BufferedReader#ipsr#;
    			String ligne;
    			while ##ligne=br#readLine###!=null#
    			{
    				System#out#println#ligne#;
    				sCurrentLine=ligne;
    				chaine+=ligne+"\n";
    			}
    			br#close##; 
     
    		}		
    		catch #Exception e#
    		{
    			System#out#println#e#t#String###;
    		}
    		return 	sCurrentLine;
    	}
     
    }
    code d'appeler de cette classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FileManipulation fileManipulation = null;
             String request=fileManipulation.readfile# #;
    				discr#request#;

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    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 710
    Points : 4 791
    Points
    4 791
    Par défaut
    C'est illisible. Il faut mettre ton code dans les balises codes prévues à cet effet.

    Sinon pourquoi n'utilises-tu pas la classe Scanner ?
    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/

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 104
    Points : 59
    Points
    59
    Par défaut
    merci pour la reponse voici le code
    code de classe lecture fichier
    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
    36
    37
    38
    39
    40
    41
    42
    43
    package file;
     
    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
     
    public class FileManipulation 
    {
    	/**
             * Constructor of the class, */
    	/*public FileManipulation() {
    			}
    	*///lecture du fichier texte de communication
    	public String readfile ()
    	{
    		String sCurrentLine="";		
    		String chaine="";
    		String fichier ="D:/communicationfile.txt";
     
    		try
    		{
    			InputStream ips=new FileInputStream(fichier); 
    			InputStreamReader ipsr=new InputStreamReader(ips);
    			BufferedReader br=new BufferedReader(ipsr);
    			String ligne;
    			while ((ligne=br.readLine())!=null)
    			{
    				System.out.println(ligne);
    				sCurrentLine=ligne;
    				chaine+=ligne+"\n";
    			}
    			br.close(); 
     
    		}		
    		catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    		return 	sCurrentLine;
    	}
     
    }
    voici le code d'appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FileManipulation fileManipulation=null;
        String request=fileManipulation.readfile( );
         disc(request);

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    bonjour,

    définie ta méthode readFile comme static,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public static String readfile ()
    ainsi tu peux l'appeler depuis une autre classe de la façon suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         String request=FileManipulation.readfile( );
         disc(request);

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 104
    Points : 59
    Points
    59
    Par défaut
    Merci à tous il marche tres bien

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    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 710
    Points : 4 791
    Points
    4 791
    Par défaut
    Citation Envoyé par sousou12 Voir le message
    Merci à tous il marche tres bien
    Ben là, je suis un peu étonné
    à priori, la méthode ne retourne que la dernière ligne, mais bon, c'est peut-être voulu.
    Quant à la variable "chaine", je ne vois pas à quoi elle sert.
    Enfin, avec la classe Scanner, le code aurait pris 2 fois moins de lignes ...
    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/

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    Ben là, je suis un peu étonné
    à priori, la méthode ne retourne que la dernière ligne, mais bon, c'est peut-être voulu.
    Quant à la variable "chaine", je ne vois pas à quoi elle sert.
    Effectivement...

    Citation Envoyé par Népomucène Voir le message
    Enfin, avec la classe Scanner, le code aurait pris 2 fois moins de lignes ...
    Non. En écrivant bien le code, il prendrait deux fois moins de lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public String readfile() throws IOException {
      String fichier ="D:/communicationfile.txt";
     
      try(InputStream ips = new FileInputStream(fichier)) {
        InputStreamReader ipsr=new InputStreamReader(ips);
        BufferedReader br=new BufferedReader(ipsr);
        String chaine = ""; 
        String ligne;
        while((ligne=br.readLine())!=null) {
          chaine += ligne+"\n";
        }
        return chaine;
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public String readfile() throws IOException {
      String fichier ="D:/communicationfile.txt";
     
      File file = new File(fichier);
      try(Scanner scanner = new Scanner(file)) {
        String chaine = ""; 
        while(scanner.hasNextLine()) {
          chaine += scanner.nextLine()+"\n";
        }
        return chaine;
      }
    }
    Deux lignes en moins parce qu'on économise la création du InputStreamReader et la déclaration String ligne;. C'est pas une révolution non plus -_-°.
    Bon, je préfère son hasNextLine() au lieu de vérifier si la ligne est null. Mais quand on utilise un Scanner, il est pas immédiatement évident qu'on veut juste tokeniser les lignes. Alors qu'un BufferedReader ne "tokenise" que ça, donc la question se pose pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    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 710
    Points : 4 791
    Points
    4 791
    Par défaut
    <CHIPOTAGE>
    J'ai dis 2 fois moins de ligne en reprenant texto l'exemple donné dans la faq :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public String readfile() throws Exception {
         String filePath ="D:/communicationfile.txt";
         Scanner scanner=new Scanner(new File(filePath));
         String chaine = ""; 
         while (scanner.hasNextLine()) {
              chaine += scanner.nextLine()+"\n";
         }
         scanner.close();
         return chaine;
    }
    </CHIPOTAGE>

    En revanche, dans ton exemple, tu utilises un FileInputStream plutôt qu'un objet File.
    Quel avantage as-t-on dans ce cas précis ?
    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/

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Aucun. Je m'étais figuré que Scanner n'implémente pas AutoCloseable et donc qu'on ne peut pas le mettre dans le try-with-resource.
    Je corrige mon exemple, ce qui fait gagner une ligne de plus. C'est vrai que ça commence à compter.

    En tout cas l'exemple que tu cites ne s'assure pas que scanner.close() est bien appelé. Pas génial à garder en FAQ. Il faudrait que ce soit dans un finally, au moins.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. lecture d'un fichier txt ligne par ligne
    Par SoBaKa dans le forum Général Python
    Réponses: 4
    Dernier message: 06/03/2007, 12h02
  2. Lecture depuis un fichiers txt
    Par mask91 dans le forum C++
    Réponses: 15
    Dernier message: 04/03/2007, 22h40
  3. Réponses: 4
    Dernier message: 13/11/2006, 22h30
  4. Lecture et ecriture fichier txt
    Par jeanmy dans le forum Delphi
    Réponses: 12
    Dernier message: 07/08/2006, 17h23
  5. [debutant] lecture d'un fichier txt de 10mo
    Par karamazov994 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 19/04/2005, 15h55

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