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 et le mettre dans un tableau


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 53
    Points : 47
    Points
    47
    Par défaut Lecture d'un fichier et le mettre dans un tableau
    Bonjour
    ja veut lire un fichier .txt et mettre les lignes du fichier dans un tableu, chaque ligne du fichier dans une ligne du tableau.
    voici le code:
    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
    import java.io.*;
     
    public class ReadFile {
    	public static void main(String[] args){
    	    String tableau []=null ;
    	    String chaine="";
    		String fichier ="class.txt";
     
    		//lecture du fichier texte	
    		try{
    			InputStream ips=new FileInputStream(fichier); 
    			InputStreamReader ipsr=new InputStreamReader(ips);
    			BufferedReader br=new BufferedReader(ipsr);
    			String ligne;
    			for(int i=0;i<tableau.length;i++){
    			while ((ligne=br.readLine())!=null){
    				tableau[i]=ligne;
    				System.out.println(tableau);
     
    		    	}
    	    	}
    			br.close(); 
    			System.out.println("Le fichier " + fichier + " a été créé!");
    		}		
    		catch (Exception e){
    			System.out.println(e.toString());
    		}
    	}
    }
    mais il m'affiche une erreur java.lang.NullPointerException,je ne sais pas ou est l'erreur si vous pouvez m'aider a la determiner.
    Merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Points : 935
    Points
    935
    Par défaut
    bonjour,

    la variable tableau étant initialisée à null
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String tableau []=null ;
    l'appel a cette variable génère logiquement un NullPointerException
    il faut donc initialiser le tableau !

  3. #3
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    tableau.length ????

    Tant que tu ne posteras pas la trace de l'erreur elle même on jouera aux devinettes ...
    C'est pas parce que ca marche que c'est bon!!
    Pensez au bouton "Résolu"
    Je ne réponds pas en privé aux questions

  4. #4
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Citation Envoyé par midou84 Voir le message
    mais il m'affiche une erreur java.lang.NullPointerException,je ne sais pas ou est l'erreur si vous pouvez m'aider a la determiner.
    Merci d'avance
    Si, il te le dit. Une exception, sauf rarissimes cas, c'est circonstancié et localisée.

    La localisation renseigne sur la méthode impliquée et la ligne fautive.

    Apprend à décrypter les exceptions, crois-moi, cela te sera très utile par la suite.

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 53
    Points : 47
    Points
    47
    Par défaut
    salut
    voici ce que j'ai changé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String [] tableau=new String[10];
    il ne m'affiche plus l'erreur précédente,il m'affiche maintenant:
    [Ljava.lang.String;@3e25a5

    plus de 10 fois (la taille du tableau)

  6. #6
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Citation Envoyé par midou84 Voir le message
    salut
    voici ce que j'ai changé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String [] tableau=new String[10];
    il ne m'affiche plus l'erreur précédente,il m'affiche maintenant:
    [Ljava.lang.String;@3e25a5

    plus de 10 fois (la taille du tableau)
    System.out.println(tableau [i] );

    Et pour info ton algo ne marchera pas ....
    Relis bien et tu verras que pour chaque ligne de tableau tu mets l'intégralité de ton fichier dedans (en effacant chaque ligne avant ...)

    Supprime la boucle for et incrémente le i dans le while ca sera deja un bon point....
    C'est pas parce que ca marche que c'est bon!!
    Pensez au bouton "Résolu"
    Je ne réponds pas en privé aux questions

  7. #7
    Membre éprouvé
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Points : 935
    Points
    935
    Par défaut
    Si le principe est de mettre le fichier dans un tableau (sans connaitre le nombre de ligne) il faut à chaque nouvelle ligne lue ajouter un élément au tableau.

    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
     
    String[] tableau = new String[0]; //création d'un fichier vide
    try {
    	java.io.InputStream ips=new java.io.FileInputStream(fichier); 
    	java.io.InputStreamReader ipsr=new java.io.InputStreamReader(ips);
    	java.io.BufferedReader br=new java.io.BufferedReader(ipsr);
    	String ligne;
    	//parcour du fichier
    	while ((ligne=br.readLine())!=null){
        	    	String[] oldTableau = tableau;
        	    	int noligne = oldTableau.length;
        	    	tableau = new String[noligne+1]; //afin d'ajouter la ligne on augmente la capacité du tableau
        	    	System.arraycopy(oldTableau, 0, tableau,0, noligne);//on recopie le contenu de l'ancien tableau dans le nouveau
        	    	tableau[noligne] = ligne; //affectation de la ligne du fichier au dernier élément du tableau
    	}
    	br.close();
    }catch (Exception e){
    	System.out.println(e.toString());
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //pour vérifier on parcour le tableau pour reconstituer dans la console le fichier 
    for(int i = 0; i< tableau.length; i++) {
        System.out.println(tableau[i]);
    }

  8. #8
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 53
    Points : 47
    Points
    47
    Par défaut
    Merci pour vos réponses

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    j'ai intégrer ce code a mon application pour un test mais j'ai une erreur...

    java.lang.NullPointerException


    private void getlist(){

    String adressedufichier = System.getProperty("user.dir") + "\\src\\pair\\list.txt";
    //Open the file for reading
    String[] tableau = new String[0];
    try {

    String ligne;


    FileReader fr = new FileReader(adressedufichier);
    BufferedReader br = new BufferedReader(fr);

    while ((ligne=br.readLine()) != null) {
    String[] oldTableau = tableau;
    int noligne = oldTableau.length;
    tableau = new String[noligne+1]; //afin d'ajouter la ligne on augmente la capacité du tableau
    System.arraycopy(oldTableau, 0, tableau,0, noligne);//on recopie le contenu de l'ancien tableau dans le nouveau
    tableau[noligne] = ligne; //affectation de la ligne du fichier au dernier élément du tableau
    }
    br.close();




    for(int i = 0; i< tableau.length; i++) {
    lists[i]=tableau[i];


    //lists est une private String [] déclarer dans le public class





    }
    }
    catch (Exception e){
    System.out.println(e.toString());
    }

    }

    quelqu'un peut-il m'aider ? =)

  10. #10
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Une exception, sauf rarissimes cas, c'est circonstancié et localisée.

    La localisation renseigne sur la méthode impliquée et la ligne fautive.

    J'ai vraiment l'impression de me répéter...

  11. #11
    Membre éprouvé
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Points : 935
    Points
    935
    Par défaut
    Citation Envoyé par Tommy31 Voir le message
    J'ai vraiment l'impression de me répéter...
    ça c'est l'age, on fini toujours par radoter

  12. #12
    Membre éprouvé
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Points : 935
    Points
    935
    Par défaut
    comment est déclaré lists ??

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2013
    Messages : 13
    Points : 9
    Points
    9
    Par défaut brino1987
    voilà un code que fait ce que tu veux




    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    import java.io.*; 
    import java.util.Vector; 
     
    public class texte { 
    public static void main(String[] args){ 
     
     
    //String chaine=""; 
     
    String fichier ="C:\\borni\\alert.txt"; 
     
    //lecture du fichier texte 
    String[] tableau = new String[0]; //création d'un fichier vide 
    String[] tab = new String[0]; //création d'un fichier vide 
    try { 
     
     
    java.io.InputStream ips=new java.io.FileInputStream(fichier); 
     
     
    java.io.InputStreamReader ipsr=new java.io.InputStreamReader(ips); 
     
    java.io.BufferedReader br=new java.io.BufferedReader(ipsr); 
     
    String ligne; 
    String line; 
     
    //boolean fich; 
     
     
     
    //parcour du fichier 
     
    while ((ligne=br.readLine())!=null){ 
     
    String[] oldTableau = tableau; 
     
    int noligne = oldTableau.length; 
     
    tableau = new String[noligne+1]; //afin d'ajouter la ligne on augmente la capacité du tableau 
     
    System.arraycopy(oldTableau, 0, tableau,0, noligne);//on recopie le contenu de l'ancien tableau dans le nouveau 
     
     
    tableau[noligne] = ligne; //affectation de la ligne du fichier au dernier élément du tableau 
     
     System.out.println(tableau[noligne]); 
     
     
    } 
     
     System.out.println("\n***************************************"); 
     
     
     System.out.println(tableau[9]); 
    System.out.println(tableau.length); 
    // br.close(); 
     
     
    }catch (Exception e){ 
     
    System.out.println(e.toString()); 
     
    } 
     
    } 
     
     
    }

  14. #14
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Sympathique ce petit déterrage, mais non, de nos jours, je ne conseillerais pas de faire comme ça :

    - Il faut Toujours faire le close(). Dans un finally
    - Copier toutes les lignes d'un tableau à un autre, à chaque nouvelle ligne, c'est trop compliqué et pas efficace. Il vaut mieux utiliser ArrayList.
    - Il vaut mieux préciser l'encodage de caractères, au cas où ça ne soit pas du full-ASCII. L'encodage par défaut de la machine est imprévisible, donc ce n'est pas forcément celui qu'on veut.
    - Les exceptions ne sont pas bien gérées.
    - Un peu d'indentation et de code clair ne font pas de mal.
    - Pourquoi laisser tout ce code commenté ?

    Ça donnerait ç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
    public static List<String> loadLines(File file) throws IOException {
      List<String> lines = new ArrayList<>();
      InputStream is = new FileInputStream(file);
      Reader tmpReader = new InputStreamReader(is, "utf-8");
      BufferedReader reader = new BufferedReader(tmpReader);
      try {
        for(String line = reader.readLine(); line != null; line = reader.readLine()) {
          lines.add(line);
        }
        return lines;
      } finally {
        reader.close();
      }
    }
    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 et Remplir dans un tableau
    Par Maz85 dans le forum VBScript
    Réponses: 2
    Dernier message: 21/05/2013, 11h21
  2. Réponses: 11
    Dernier message: 29/05/2012, 11h46
  3. Réponses: 3
    Dernier message: 12/11/2009, 14h26
  4. Réponses: 6
    Dernier message: 07/03/2009, 19h23
  5. Réponses: 9
    Dernier message: 05/11/2007, 11h05

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