Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lire une ligne précise d'un .txt

Sujet résolu
    16 juillet 2019 à 17:07:54

    Bjr,
    Après avoir tester plusieurs tuto dispo sur différent site je n'arrive pas a m'en servir, j'ai un code et je voudrait pouvoir lire un ligne en préci, pouver vous m'aider ?
    • Partager sur Facebook
    • Partager sur Twitter

    Des fois je suis en pls donc si besoin voici mon discord : robmat2005#6307

      16 juillet 2019 à 17:22:03

      Montre-nous ce que tu as commencé, et on te dira comment le terminer.
      • Partager sur Facebook
      • Partager sur Twitter
        16 juillet 2019 à 18:49:06

        Impossible , pour pouvoir acceder directement a une ligne faudra lire le fichier en entier ( et le mettre dans un tableau par exemple ).
        La lecture est sequentiel , tu ne peux pas dire : va a la ligne 10 , sans lire les 9 premiere.

        • Partager sur Facebook
        • Partager sur Twitter
          16 juillet 2019 à 19:26:37

          Zérotisme a écrit:

          Impossible , pour pouvoir acceder directement a une ligne faudra lire le fichier en entier ( et le mettre dans un tableau par exemple ).
          La lecture est sequentiel , tu ne peux pas dire : va a la ligne 10 , sans lire les 9 premiere.

          Sa je veux bien tout lire sa ne me gène pas mais il me faut plusieurs situation : il me faut lire la deuxième ligne, la troisième puis de la 5ème jusqu'a la fin. Que se soit dans un byte[] ou pas sa ne me gène pas. et

          Zachee54 a écrit:

          Montre-nous ce que tu as commencé, et on te dira comment le terminer.

          voici ce que j'ai fait : ( je ne mais que le bout sur le quel je veux l'utiliser) :




          File fKit = new File("plugins/Kitzs/Kits/" + s2s + ".txt");
                             
          if(fKit.exists() == true) {
                                 


          }


          Ceci marche


              Scanner sc = new Scanner(fKit);
              sc.useDelimiter("\\Z");
              String str = sc.next();
              byte[] byteArr = str.getBytes();
              System.out.println("String to byte array: " + Arrays.toString(byteArr));

          mais voila ce que sa me sort

          105, 13, 10
          105, 105, 105, 13, 10,
          105

          pour :
          i
          iii
          i

          comment séparer les lignes ?

          (cela pourait suffir !)

          -
          Edité par robomat 16 juillet 2019 à 19:47:09

          • Partager sur Facebook
          • Partager sur Twitter

          Des fois je suis en pls donc si besoin voici mon discord : robmat2005#6307

            16 juillet 2019 à 20:45:58

            try(BufferedReader br = new BufferedReader(new FileReader(file))) {
                for(String line; (line = br.readLine()) != null; ) {
                    // process the line(add it to a list)
                }
            }
            
            // read line #2, #3, and #5 from the list 
            pourquoi lire en bytes ... lis le ligne par ligne ?
            • Partager sur Facebook
            • Partager sur Twitter
              17 juillet 2019 à 16:58:37

              Tout d'abord, il faut que tu utilises des blocs try.
              C'est une bonne pratique de base chaque fois que tu ouvres des ressources (fichier, base de données, etc).

              Ensuite, Java propose plusieurs classes qui permettent de lire des flux de données :

              • InputStream pour lire des octets
              • BufferedInputStream pour lire des octets avec un tampon mémoire (plus performant que d'aller solliciter le disque dur octet par octet)
              • InputStreamReader pour convertir un flux d'octets en flux de caractères
              • FileInputStream qui lit un flux d'octets depuis un fichier
              • FileReader qui permet de lire un fichier comme flux de caractères
              • BufferedReader pour lire un flux de caractères avec un tampon en mémoire.

              Actuellement, ce que tu fais revient à utiliser un FileInputStream. Les nombres que tu obtiens sont les valeurs des octets écrits dans le fichier (Je rappelle qu'un fichier, ce n'est qu'une suite de 0 et de 1...).

              Si on met tout ensemble, voilà ce que ça donne :

              File file = ... // ton fichier
              
              try (
                FileReader fileReader = new FileReader(file);
                BufferedReader bufReader = new BufferedReader(fileReader);) {
              
                String ligne = bufReader.readLine();
                ...
                // Ici je te laisse faire ce que tu veux pour lire les lignes suivantes
              
              }
              • Partager sur Facebook
              • Partager sur Twitter
                18 juillet 2019 à 20:50:18

                Zachee54 a écrit:

                Tout d'abord, il faut que tu utilises des blocs try.
                C'est une bonne pratique de base chaque fois que tu ouvres des ressources (fichier, base de données, etc).

                Ensuite, Java propose plusieurs classes qui permettent de lire des flux de données :

                • InputStream pour lire des octets
                • BufferedInputStream pour lire des octets avec un tampon mémoire (plus performant que d'aller solliciter le disque dur octet par octet)
                • InputStreamReader pour convertir un flux d'octets en flux de caractères
                • FileInputStream qui lit un flux d'octets depuis un fichier
                • FileReader qui permet de lire un fichier comme flux de caractères
                • BufferedReader pour lire un flux de caractères avec un tampon en mémoire.

                Actuellement, ce que tu fais revient à utiliser un FileInputStream. Les nombres que tu obtiens sont les valeurs des octets écrits dans le fichier (Je rappelle qu'un fichier, ce n'est qu'une suite de 0 et de 1...).

                Si on met tout ensemble, voilà ce que ça donne :

                File file = ... // ton fichier
                
                try (
                  FileReader fileReader = new FileReader(file);
                  BufferedReader bufReader = new BufferedReader(fileReader);) {
                
                  String ligne = bufReader.readLine();
                  ...
                  // Ici je te laisse faire ce que tu veux pour lire les lignes suivantes
                
                }
                Après avoir utiliser ton code voici le messge que je reçoit :
                64_LOG
                64_LOG
                64_LOG
                64_LOG
                64_LOG
                64_LOG
                64_LOG
                64_LOG

                au lieu de :

                Test
                1
                Kitzs.kit.test
                  Item:
                    DIRT, 64
                    SPRUCE_LOG, 64
                • Partager sur Facebook
                • Partager sur Twitter

                Des fois je suis en pls donc si besoin voici mon discord : robmat2005#6307

                  18 juillet 2019 à 20:53:24

                  Zérotisme a écrit:

                  try(BufferedReader br = new BufferedReader(new FileReader(file))) {
                      for(String line; (line = br.readLine()) != null; ) {
                          // process the line(add it to a list)
                      }
                  }
                  
                  // read line #2, #3, and #5 from the list 

                  pourquoi lire en bytes ... lis le ligne par ligne ?



                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 juillet 2019 à 8:45:58

                    Bonjour,

                    Pour lire un fichier texte proprement et simplement, cf l'excellent tuto de Pinguet

                    => https://openclassrooms.com/forum/sujet/tuto-les-flux-fichiers-la-lecture

                    Exemple :

                    // Pour lire un fichier en une ligne
                    List<String> lines = Files.readAllLines(Paths.get("/path/to/file.ext"));

                    (avec un try/catch autour, bien sûr)

                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 juillet 2019 à 9:35:35

                      Zérotisme a écrit:

                      try(BufferedReader br = new BufferedReader(new FileReader(file))) {
                          for(String line; (line = br.readLine()) != null; ) {
                              // process the line(add it to a list)
                          }
                      }
                      
                      // read line #2, #3, and #5 from the list 
                      Je ne suis pas sûr que le FileReader soit fermé automatiquement par le try-with-ressources au cas où l'instanciation du BufferedReader plante ? et aussi au cas où la méthode close() du BufferedReader plante ?

                      MathisBricolo a écrit:

                      Après avoir utiliser ton code voici le messge que je reçoit :
                      64_LOG
                      64_LOG
                      64_LOG
                      64_LOG
                      64_LOG
                      64_LOG
                      64_LOG
                      64_LOG

                      Tu peux nous montrer comment tu as complété mon code ? Parce que c'était juste une base de départ, pas une solution toute faite.

                      brubru777 a écrit:

                      Bonjour,

                      Pour lire un fichier texte proprement et simplement, cf l'excellent tuto de Pinguet

                      => https://openclassrooms.com/forum/sujet/tuto-les-flux-fichiers-la-lecture

                      Exemple :

                      // Pour lire un fichier en une ligne
                      List<String> lines = Files.readAllLines(Paths.get("/path/to/file.ext"));

                      (avec un try/catch autour, bien sûr)

                      Génial ce tuto et cette solution !

                      Il faut juste être conscient que si le fichier est très gros, il ne pourra pas être lu en entier. Les autres méthodes ont l'avantage de traiter les lignes à la volée.
                      Mais bon, pour un tuto de débutant, la question ne se pose pas.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 juillet 2019 à 13:51:49

                        Nemo404 a écrit:

                        Bonjour,

                        Tu peux essayer ce tuto, il est assez court : https://www.roseindia.net/tutorial/java/io/readSpecificFile.html


                        A son code marche effectivement .
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Des fois je suis en pls donc si besoin voici mon discord : robmat2005#6307

                          19 juillet 2019 à 14:20:19

                          @Zachee54

                          On peut aussi traiter les lignes à la volée avec

                          Stream<String> stream = Files.lines(Paths.get("/path/to/file.ext"));

                          mais c'est peut-être plus pour les programmeurs "avancés".

                          • Partager sur Facebook
                          • Partager sur Twitter
                            19 juillet 2019 à 15:18:21

                            brubru777 a écrit:

                            @Zachee54

                            On peut aussi traiter les lignes à la volée avec

                            Stream<String> stream = Files.lines(Paths.get("/path/to/file.ext"));

                            mais c'est peut-être plus pour les programmeurs "avancés".

                            Ah oui, cette méthode renvoie effectivement un flux et pas une collection.
                            +1



                            • Partager sur Facebook
                            • Partager sur Twitter

                            Lire une ligne précise d'un .txt

                            × 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