Partage
  • Partager sur Facebook
  • Partager sur Twitter

lecture d'un fichier sequentiel avec FileReader

    18 mai 2012 à 14:31:43

    Bonjour

    Lorsque je lis un fichier sequentiel via FileReader, le programme crash à la fin de la lecture. Il me lis les lignes que j'ai écrites grâce au programme d'écriture, mais plante juste après.
    Le programme d'écriture contient il une anomalie ? Y a t'il un problème avec mon programme de lecture ?

    J'ai essayé de réecrire les deux au cas où, et la deuxième version plante avant même de lire le texte u_u Après bidouillage il s'avère que mes deux programmes de lecture plantent identiquement suivant que j'essaie de lire essai. dat ( fruit du premier prog d'ecriture ) ou essai2.dat ( fruit du 2ème ).

    Je pense pouvoir en conclure que mes programmes d'écritures sont défecteux.

    Par ailleurs, la ligne fléchée est elle utile ? Si oui à quoi ?
    voici un des programme de lecture :

    public class Aur8
    {
    	
    	public static BufferedReader flux = new BufferedReader (new InputStreamReader (System.in)) ;
    	
    	public static void main (String[] arg ) throws IOException
    		{
    		String ligneLue = new String() ;	
    		char c ;	
    			
    		ligneLue = "";
    		
    		FileReader fichierLu = new FileReader("essai2.dat") ;
    			
    		c = (char) fichierLu.read() ;
    			
    		while ( c != -1 )
    		{
    			if ( c != (int) '\n' )
    			{
    			ligneLue = ligneLue + (char) c ;
    			}
    			else
    			{
    				System.out.println(ligneLue) ;
    				ligneLue = "";
    			}
    			c = (char) fichierLu.read() ;
    		}
    		
    		if ( ligneLue.length() != 0 ) System.out.println(ligneLue) ; // <==
    		
    		fichierLu.close() ;
    			
    		}
    	}
    


    Et voici le programme d'écriture à la suite duquel le fichier est lisible mais provoque un plantage

    import java.io.* ;
    
    public class SauvegardeSeq
    {
    	public final static boolean create = false ;
    	
    	public static BufferedReader flux = new BufferedReader (new InputStreamReader(System.in)) ;
    	
    	public static void main (String[] arg ) throws IOException
    	{
    		String ligneEcrite = new String() ;
    		
    		FileWriter  fichierEcrit = new FileWriter("essai.dat",create) ;
    		do
    		{
    			System.out.println( " Saisir une ligne : " ) ;
    			ligneEcrite = flux.readLine() ;
    			
    			if ( ligneEcrite.length() != 0 )
    			{
    				fichierEcrit.write( ligneEcrite + "\n") ;
    				}
    				
    		} while ( ligneEcrite.length() != 0 ) ;
    		
    		fichierEcrit.close() ;
    		
    		}
    	}
    
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      18 mai 2012 à 15:00:11

      Si tu entoures ton while avec un

      try {
      ...
      } catch (EOFException e) {}
      


      ça va mieux ?
      • Partager sur Facebook
      • Partager sur Twitter
        18 mai 2012 à 15:13:26


        Je ne connais pas cette commande, j'ai lu le fichier d'aide et essayé de procéder ainsi :

        public class Aur8
        {
        	
        	public static BufferedReader flux = new BufferedReader (new InputStreamReader (System.in)) ;
        	
        	public static void main (String[] arg ) throws IOException
        		{
        		String ligneLue = new String() ;	
        		char c ;	
        			
        		ligneLue = "";
        		
        		FileReader fichierLu = new FileReader("essai.dat") ;
        			
        		c = (char) fichierLu.read() ;
        		
        		try {
        		while ( c != -1 )
        		{
        			if ( c != (int) '\n' )
        			{
        			ligneLue = ligneLue + (char) c ;
        			}
        			else
        			{
        				System.out.println(ligneLue) ;
        				ligneLue = "";
        			}
        			c = (char) fichierLu.read() ;
        		} } catch ( EOFException e ) {}
        		
        		if ( ligneLue.length() != 0 ) System.out.println(ligneLue) ;
        		
        		fichierLu.close() ;
        			
        		}
        	}
        


        Toutefois je n'ai pas vu de différence à l'éxécution.
        • Partager sur Facebook
        • Partager sur Twitter
          18 mai 2012 à 15:35:28

          Forcément, si tu essaies de faire du C en Java, ça ne marche pas bien.

          Je consulte la FAQ Java : http://java.developpez.com/faq/java/?p [...] LigneParLigne
          et y trouve la manière normale de résoudre ton problème (lire un fichier ligne par ligne) en Java depuis le 30 septembre 2004 :

          String filePath = "g:\\fichier.txt";
          
          Scanner scanner = new Scanner(new File(filePath));
          
          // On boucle sur chaque champ detecté
          while (scanner.hasNextLine()) {
              String line = scanner.nextLine();
              
              System.out.println(line);
              //faites ici votre traitement
          }
          
          scanner.close();
          

          Vachement plus simple non ?
          Toute la doc de la classe Scanner dans le lien ci-dessus.
          • Partager sur Facebook
          • Partager sur Twitter
            18 mai 2012 à 15:50:48


            Merci beaucoup d'aeesayer de m'aider Spacefox.

            Vachement plus simple oui, mais pas ce qui est demandé.

            Je ne cherche pas à lire ligne par ligne, mais caractère par caractère. Pas juste pour le plaisir mais parce ce que c'est ainsi que c'est fait dans mon cours et parce que c'est ( en partie ) là dessus que mes examens porteront.

            Je suis débutant en Java, et si j'étais capable de solutionner mes problèmes en consultant la FAQ précitée, crois moi je le ferais.

            Le programme ( incomplet ) qui est donné dans mon cours ne fonctionne pas et si je poste ici c'est pour essayer de le comprendre le mieux possible.

            Je ne sais pas à quoi tu fais allusion quand tu parles de " faire du C dans du Java ", je n'ai jamais fait de C.

            Je ne sais même pas si ce n'est pas le programme qui crée le .dat qui pose problème ou celui qui le lit. :(
            • Partager sur Facebook
            • Partager sur Twitter
              18 mai 2012 à 16:01:55

              Le programme que tu donnes en exemple fait exactement la même chose que le mien : il affiche les lignes du fichier les unes derrière les autres.

              Quel est exactement ton problème ?
              Tu ne comprends pas ce que fait le programme que tu donnes ?
              Tu sais ce qu'il fait mais il ne fait pas ce que tu penses ?
              Quel est le comportement attendu ?
              Quelle est l'erreur obtenue ?
              Quel est le contenu du fichier .dat ?
              Quel est l'énoncé de l'exercice s'il y en a un ?
              • Partager sur Facebook
              • Partager sur Twitter
                18 mai 2012 à 16:16:18


                Mon programme SauvegardeSeq est censé créer un fichier "essai.dat" contenant des lignes de texte qui sont saisies par l'utilisateur.

                Mon programme Aur8 est censé lire les lignes de textes contenues dans un fichier " essai.dat".

                A l'éxécution, le programme qui écrit semble fonctionner normalement, et s'arrête normalement à la fin de la saise des phrases.

                Toutefois, le programme qui lit lorsqu'il est exécuté plante juste après la lecture de la dernière ligne contenue dans essai.dat et m'oblige à fermer la fenêtre dos, et la relancer ( je travaille avec scite + le dos, mon prof a dit de privilégier ça à Eclipse dans un premier temps de sorte à corriger le plus souvent possible mes erreurs moi même )

                Ce n'est pas un exercice, j'ai recopié les programmes ( incomplets ) du cours et j'essaie de les faire tourner car j'ai des exercices plus difficiles qui suivent et je veux comprendre les bases ( par la suite je dois saisir les valeurs d'une matrice carrée, les sauvegarder sur un .bat et être capable de les relire depuis le .bat par exemple)

                • Partager sur Facebook
                • Partager sur Twitter
                  18 mai 2012 à 16:55:50

                  Citation : Mythryl



                  Toutefois, le programme qui lit lorsqu'il est exécuté plante juste après la lecture de la dernière ligne contenue dans essai.dat et m'oblige à fermer la fenêtre dos, et la relancer



                  Aucun message d'erreur, juste plantage.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 mai 2012 à 17:12:33

                    Il envoie forcément une exception. Catche-la et affiche la, tu ne pourras jamais aller plus loin sans ça.
                    • Partager sur Facebook
                    • Partager sur Twitter

                    lecture d'un fichier sequentiel avec FileReader

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown