J'ai différents fichiers texte que j'aimerais lire et j'utilise BufferedReader
pour cela comme ceci:
int theMax = 0; int theTypes = 0; int []theSlices = {}; /* INPUT1: 17 4 2 5 6 8 INPUT2: 100 10 4 14 15 18 29 32 36 82 95 95 */ try { FileReader reader = new FileReader("INPUT1.in"); BufferedReader bufferedReader = new BufferedReader(reader); String line; while ((line = bufferedReader.readLine()) != null) { String[] numbers = line.split(" "); System.out.println(numbers[0]); System.out.println(line); } reader.close(); } catch (IOException e) { e.printStackTrace(); } ;
Mon problème est que je voudrais définir les valeurs pour theMax
, theTypes
& theSlices
mais pour cela, j'ai besoin d'obtenir le numéro de ligne actuel et je n'ai aucune idée de comment faire cela . La lecture du fichier fonctionne et println (les nombres [0]
imprime 17 et 2. Je suis un peu coincé ici, donc je suis content de chaque aide.
Exemple pour INPUT1 :
theMax
= 17
theTypes
= 4
theSlices
= 2 5 6 8
3 Réponses :
Très simple: vous vous suivez vous-même.
String line; int currentLine = 0; while ((line = bufferedReader.readLine()) != null) { String[] numbers = line.split(" "); System.out.println("Linenumber " + currentLine); System.out.println(numbers[0]); System.out.println(line); currentLine ++; } reader.close();
Je ne suis pas sûr de bien comprendre ce que vous recherchez, mais pour simplement garder une trace des numéros de ligne, créez une variable que vous incrémentez dans votre boucle while
c.-à-d.
try { FileReader reader = new FileReader("INPUT1.in"); BufferedReader bufferedReader = new BufferedReader(reader); String line; long currentLineNr = 0; while ((line = bufferedReader.readLine()) != null) { currentLineNr++; String[] numbers = line.split(" "); System.out.println(numbers[0]); System.out.println(line); //Use the currentLineNr how you like } reader.close(); } catch (IOException e) { e.printStackTrace(); }
Tout d'abord, pour autant que je sache (et après avoir lu la documentation Java officielle à ce sujet ici - https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html ), la classe BufferedReader ne fonctionne pas en elle-même vous donne un mécanisme (par exemple, une méthode getCurrentLine ()) pour déterminer la ligne courante.
Cependant, rien ne vous empêche de suivre vous-même le numéro de la ligne actuelle grâce, par exemple, à une variable de compteur.
Par conséquent, la section pertinente de votre code ressemblerait à:
BufferedReader bufferedReader = new BufferedReader(new FileReader("INPUT1.in"));
Je voudrais également mentionner que votre code pourrait être amélioré ici et là, par exemple: p>
FileReader reader = ; BufferedReader bufferedReader = new BufferedReader(reader);
peut être simplifié en:
int currentLine = 0; while ((line = bufferedReader.readLine()) != null) { currentLine++; String[] numbers = line.split(" "); /* NOTE: this can be numbers.length >= 2 if you don't care to enforce having exactly 2 numbers as the first line */ if(currentLine == 1 && numbers.length == 2) { theMax = Integer.valueOf(numbers[0]); theTypes = Integer.valueOf(numbers[1]); } else { for(int index = 0; index < numbers.length; index++) { theSlices[index] = Integer.valueOf(numbers[index]); } } } // do something with read values
et il vous suffit ensuite de gérer l'instance bufferedReader si vous vous en tenez pour essayer à la place d'essayer avec des ressources.
J'espère que cela vous aidera.
PS: sans dire que mon extrait de code ci-dessus est parfait, je suis sûr qu'il peut être écrit plus proprement p >
Ce serait une meilleure réponse si les blocs try / catch étaient supprimés. Remplir aveuglément le tableau avec des zéros n'est probablement pas la meilleure réponse aux chaînes d'entrée mal formées.