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

Langage Java Discussion :

Lecture de fichiers texte en Java -> NullPointerException


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut Lecture de fichiers texte en Java -> NullPointerException
    Bonjour à tous,

    Ca fait 2 jours que j'essaie d'apprendre avec les tutos sur Internet à lire dans un fichier texte ligne par ligne en Java.

    Voici mon 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
    			fis1 = new FileInputStream(conn);
    			fis2 = new FileInputStream(reco);
    			
    			ipsr1 = new InputStreamReader(fis1);
    			ipsr2 = new InputStreamReader(fis2);
    			
    			br1 = new BufferedReader(ipsr1);
    			br2 = new BufferedReader(ipsr2);
    			
    			ArrayList<ArrayList<String>> gal = new ArrayList<ArrayList<String>>();
    			ArrayList<ArrayList<String>> gal2 = new ArrayList<ArrayList<String>>();
    			
    			String rl = null;
    			
    			while ((rl = new String(br1.readLine()))!=null)
    			{			
    				System.out.println(rl);
    				String[] s = rl.split(" ");
    				ArrayList<String> al = new ArrayList<String>();
    				Collections.addAll(al, s);
    				gal.add(al);
    				//rl = br1.readLine();
    			}
    J'ai cru comprendre que si je mets un "readLine" dans le while, il va passer à la ligne suivante. Alors j'ai fait comme ça.

    Mais pour une raison que je me creuse la tête à comprendre, il s'arrête à l'avant dernière ligne de mon fichier texte et m'affiche un NullPointerException au niveau de la ligne en gras.

    Merci pour vos lumières.

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut
    Bon, j'ai résolu le problème en mettant le "new String" avant la boucle while, mais par contre, il ne lit pas les 2 dernières lignes du fichier...

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Bonjour,

    Pour la lecture ligne par ligne il y a la FAQ :

    http://java.developpez.com/faq/java/...eLigneParLigne


    Pour le problème des 2 dernières lignes postes ton code à jour.

  4. #4
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    pourquoi faire new String(br1.readLine())
    le code correct serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while(null != (r1= br1.readLine()))
    sinon quand readLine rend null tu as un NullPointerException

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par User Name Voir le message
    mais par contre, il ne lit pas les 2 dernières lignes du fichier...
    Elles n'existent sans doute pas.

    Ou alors il y a un bug dans le reste de ton code, c'est possible aussi.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut
    Je constate que mon dernier message n'a pas été posté...
    Je disais qu'effectivement je n'avais pas fait gaffe, c'était des retours de ligne sans passer à une nouvelle ligne.

    Par contre, j'en profite pour vous poser une autre question (j'ai cherché évidemment, mais comme je débute dans ce domaine, je comprends lentement):

    J'ai utilisé un BufferedWriter (vu sur Internet) pour écrire dans un 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
    ArrayList<Integer> temp_al2;
    			for (int p=0; p<bytes.size(); p++)
    			{
    				t = bytes.get(p);
    				bw.write(((char)(int)t));
    				System.out.print(t);
    				
    				temp_al2 = hashmap.get(t);
    				
    				for (int q=0; q<temp_al2.size(); q++)
    				{
    					bw.write(temp_al2.get(q));
    					System.out.print((int)temp_al2.get(q));
    				}
    				System.out.println();
    				
    				bw.flush();
    				bw.newLine();
    			}
    Dans la ligne en gras, j'essaie d'écrire des "Integer" dans un fichier texte. Mais que je caste en char, int, byte ou autre, ils n'apparaissent pas. Les char de la première ligne grasse apparaissent, eux. Pourquoi?

    Je n'arrive pas non-plus à comprendre la différence entre utiliser un BufferedWriter et un FileOutputStream (auquel je suis plus habitué).

    Merci d'avance pour vos (r)enseignements. ^^

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 281
    Par défaut
    Je ne comprend pas bien ton problème de cast, apparition (où quand comment) mais ce que je peux te dire c'est que le bufferedWriter te permet d'écrire plus vite dans un fichier car comme son nom l'indique il utilise un buffer.

  8. #8
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut
    Et pourquoi mon BufferedWriter n'affiche pas mes int castés en byte puis en char dans mon fichier? Il écrit des espaces à la place... :/

Discussions similaires

  1. lecture d'un fichier texte avec java.
    Par thy-sins dans le forum Général Java
    Réponses: 1
    Dernier message: 03/02/2012, 07h12
  2. la lecture et l’écriture dans des fichiers textes en java
    Par blackhock dans le forum Général Java
    Réponses: 2
    Dernier message: 06/05/2009, 17h10
  3. Question sur lecture d'un fichier text en Java
    Par ovcrash dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 27/11/2007, 17h14
  4. lecture de fichier texte
    Par prorider dans le forum C
    Réponses: 36
    Dernier message: 08/09/2004, 20h55

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