Vidéo: APPRENDRE LE JAVA #15 - LES FICHIERS 2024
Dans cette liste de code Java, La méthode payOneEmployee illustre quelques astuces utiles pour lire les données. En particulier, chaque scanner que vous créez possède une méthode nextLine. (Vous ne pouvez pas utiliser cette méthode nextLine, mais la méthode est néanmoins disponible.)
Lorsque vous appelez la méthode nextLine d'un scanner, la méthode saisit tout jusqu'à la fin de la ligne de texte en cours. Dans cette liste, un appel à nextLine peut lire une ligne entière à partir de EmployeeInfo. fichier txt. (Dans un autre programme, l'appel nextLine d'un scanner peut lire tout ce que l'utilisateur tape sur le clavier jusqu'à l'appui sur la touche Entrée.)
import java. util. Scanner; importer Java. io. Fichier; importer Java. io. IOException; public class DoPayroll {public static void principal (String args []) throws IOException {Scanner diskScanner = nouveau Scanner (nouveau fichier ("EmployeeInfo.txt")); pour (int empNum = 1; empNum <= 3; empNum ++) {payOneEmployee (diskScanner);} diskScanner. close ();} static void payOneEmployee (Scanner aScanner) {Employé anEmployé = new Employé (); un employé. setName (aScanner, nextLine ()); un employé. setJobTitle (aScanner, nextLine ()); un employé. cutCheck (aScanner, nextDouble ()); un Scanner. nextLine ();}}
Notez le choix judicieux des mots: nextLine lit tout jusqu'à la fin de la ligne courante. Malheureusement, ce que signifie lire jusqu'à la fin de la ligne actuelle n'est pas toujours ce que vous pensez que cela signifie. L'entremêlement des appels nextInt, nextDouble et nextLine peut être désordonné. Vous devez regarder ce que vous faites et vérifier attentivement la sortie de votre programme.
Pour comprendre tout cela, vous devez être douloureusement conscient des sauts de ligne d'un fichier de données. Pensez à un saut de ligne en tant que caractère supplémentaire, coincé entre une ligne de texte et la suivante. Imaginez ensuite qu'appeler nextLine signifie lire tout jusqu'à et y compris le saut de ligne suivant.
Jetez un coup d'œil à ce chiffre.
-
Si un appel à nextLine lit Barry Burd [LineBreak], l'appel suivant à nextLine indique CEO [LineBreak].
-
Si un appel à nextDouble lit le numéro 5000. 00, l'appel suivant à nextLine lit le [LineBreak] qui vient immédiatement après le numéro 5000. 00. (C'est tout le nextLine lit - un [LineBreak] et rien de plus.
-
Si un appel à nextLine lit le [LineBreak] après le numéro 5000. 00, l'appel suivant à nextLine lit Harriet Ritter [LineBreak].
Donc, après avoir lu le numéro 5000. 00, vous avez besoin de deux appels à nextLine pour récupérer le nom Harriet Ritter. L'erreur que vous faites habituellement est d'oublier le premier de ces deux appels.
Regardez à nouveau le fichier sur la figure. Pour que le code de cette section fonctionne correctement, vous devez avoir un saut de ligne après le dernier 10000. 00. Si vous ne le faites pas, un dernier appel à nextLine fait planter et graver votre programme. Le message d'erreur lit NoSuchElementException: Aucune ligne trouvée.
Vous pourriez être surpris par le nombre de bizarreries que vous trouvez dans les méthodes de numérisation de chaque langage de programmation. Par exemple, le premier nextLine qui lit le fichier dans la figure dévore Barry Burd [LineBreak] du fichier.
Mais cet appel nextLine fournit Barry Burd (sans saut de ligne) au code en cours d'exécution. Ainsi, nextLine recherche un saut de ligne, puis nextLine perd le saut de ligne. Oui, c'est un point subtil. Et non, ce point subtil ne pose presque jamais de problèmes à personne.
Si cette affaire sur nextDouble et nextLine vous embrouille, ne blâmez pas Java. Mélanger les appels d'entrée est un travail délicat dans tout langage de programmation informatique. Et la chose vraiment désagréable est que chaque langage de programmation aborde le problème un peu différemment.
Ce que vous apprenez à propos de nextLine dans Java vous aide à comprendre les problèmes lorsque vous apprenez à connaître C ++ ou Visual Basic, mais il ne vous dit pas tous les détails. Les détails de chaque langue sont uniques à cette langue.