Lire un fichier texte

Signaler
Messages postés
6
Date d'inscription
vendredi 1 octobre 2010
Statut
Membre
Dernière intervention
23 octobre 2010
-
Messages postés
6
Date d'inscription
vendredi 1 octobre 2010
Statut
Membre
Dernière intervention
23 octobre 2010
-
Bonjour,
Je cherche à lire un fichier texte ligne par ligne avec la méthode readLine(), Pour le stocker dans une matrice. Dans un premier temps, comme je n'ai jamais utilisé de Buffer, je voulais juste lire la première ligne de mon fichier, composé de 1 et de 0 séparés par des espaces, et de l'afficher dans la console.
Mon problème avec le code suivant, c'est que la console d'Eclipse me renvoie un "null".
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;


public class LireNiveau {
    private String ligne;
    
    public LireNiveau ()
    {
        try
        {
            BufferedReader inputStream = new BufferedReader(new FileReader("Niveau.txt"));
            ligne =  inputStream.readLine();
            inputStream.close();
        }
        catch (IOException e)
        {}
                        
    }
    public void afficher()
    {
        System.out.println(ligne);
    }    
}


Donc j'ai cherché, et j'ai vu que l'on pouvait faire une boucle sur la valeur de la chaîne "ligne", mais je ne comprend pas si je doit mettre !ou null ...
        try
        {
            BufferedReader inputStream = new BufferedReader(new FileReader("Niveau.txt"));
            while (ligne!=null /* ou == ??? */ ) ligne =  inputStream.readLine();
            inputStream.close();
        }

5 réponses

Messages postés
6
Date d'inscription
vendredi 1 octobre 2010
Statut
Membre
Dernière intervention
23 octobre 2010

Désolé pour le double post, mais j'ai fait une fausse manip en voulant afficher un aperçu, et je n'ai pas vu comment éditer un message ...
Je voulais donc vous demander si vous pouviez me dire où est le problème ? Je suis sûr que c'est tout con pourtant ...
Merci d'avance,

Thibault
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
363
Regarde cette source, ce que tu essayes de faire est déjà fait
http://www.javafr.com/codes/LIRE-ECRIRE-FICHIERS-TEXTE_52348.aspx

Sinon pour ton erreur, c'est le chemin de ton fichier texte qui n'est pas bon, "Niveau.txt" il ne sait pas où aller le chercher met lui un truc du genre "\\home\\user\\Niveau.txt".

C'est une mauvaise idée de catcher ton exception et de ne rien faire, si dans le catch, tu écris e.printStackTrace(); je pense que tu vas voir ce qui se passe, tu auras une IOException.
Messages postés
6
Date d'inscription
vendredi 1 octobre 2010
Statut
Membre
Dernière intervention
23 octobre 2010

En fait, je viens de résoudre mon problème, qui vient plutôt de l'utilisation de Windows Seven ...
Je m'explique : je n'avais pas besoin d'indiquer le path de mon fichier, puisque celui-ci était simplement rangé dans le même dossier que le "src".
Par contre, le problème est que je n'avais pas appelé le bon fichier :
je l'avais créer en tant que Niveau.txt, sauf que windows rajoute automatiquement l'extension sans me l'afficher. Du coup le véritable nom de mon fichier est en fait Niveau.txt.txt
Je pouvais toujours essayer ...
En corrigeant ce soucis, le code marche impeccable ! Mais pour la forme, j'ai quand même rajouter le e.printStackTrace();

Merci pour votre aide ! même si je risque de reposer une autre une autre question sur le même fil d'ici peu ...
Messages postés
6
Date d'inscription
vendredi 1 octobre 2010
Statut
Membre
Dernière intervention
23 octobre 2010

Oh bah tenez, ca a pas traîné !
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;


public class LireNiveau {
    private String ligne;
    private BufferedReader inputStream;     
    private StringTokenizer st; 
    private int [][] matrice_niveau ;
    
    public LireNiveau ()
    {
        try
        {
            inputStream = new BufferedReader(new FileReader("Niveau.txt"));
            ligne =  inputStream.readLine();
            if(ligne==null) inputStream.close();
        }
        catch (FileNotFoundException e)
        {
            System.out.println("Fichier non trouvé !");
        }
        
        catch (IOException e)
        {
            e.printStackTrace();
        }
                        
    }
    public void afficher()
    {
        st = new StringTokenizer(ligne);
        try
        {
            do
            {
                for(int j=0; j<10; j++)
                {
                    for(int i=0;i<10; i++)
                    {
                        //matrice_niveau[i][j] = Integer.parseInt(st.nextToken());
                    }
                    System.out.println(ligne);//test pour avoir la valeur de ligne
                    ligne =  inputStream.readLine();
                     st.setString(ligne, ' ');
                }
            }//fin de la boucle de chargement de niveau    
        while (ligne!=null);
        inputStream.close(); // fermeture du flux une fois qu'il est lu en entier
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}


J'ai voulu avancer dans ma méthode, et entrer un par un les chiffres de mon fichier dans une matrice 10*10, grâce à un StringTokenizer. A chaque fois que ma ligne est lue, je veux passer à la suivante. J'arrive à changer la valeur de ma variable String ligne, mais pour dire au Tokenizer de changer de chaîne, je n'y arrive pas. Dans les sources que j'ai vus, il y avait :
st=new StringTokenizer(ligne);


Mais ca me semble un peu brutal pour juste changer de chaine, et il faudrait supprimer l'ancienne "st", aussi, non? Donc j'ai chercher un peu, et je suis tombé sur la méthode "public void setString(java.lang.String str, char delim)" ici
de la classe StringTokenizer. Je me suis empressé de l'utiliser, et bim, Eclipse ne reconnait pas la méthode pour les arguments (String, char) que j'utilise

Merci de votre aide,

Thibault
Messages postés
6
Date d'inscription
vendredi 1 octobre 2010
Statut
Membre
Dernière intervention
23 octobre 2010

J'ai finalement contourné mon problème sans le résoudre :
au lieu de changer la chaine de caractère a chaque ligne, j'ai concaténé toutes les lignes en une seule chaine de caratères, que j'ai envoyée au stringTokenizer. C'est pas très joli, mais ca marche