import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; public class Process_TCPProbe_dm{ public static void main(String[] args) throws IOException { //Extracting the port numbers from the file names passed in the arguments String portNumber1 = args[1].substring(9, 14); String portNumber2 = args[2].substring(9, 14); String portNumber3 = args[3].substring(9, 14); int i = 0; Scanner s = new Scanner(new FileReader(args[0])); //Initialising array of contents with length equals to number of lines in the input file String[] contents = new String[18]; while(true) { if (i == 18) break;//Skipping the last line of the file //Replaces the whitespace with comma and stores in the string array contents[i] = s.nextLine().replace(" ", ","); i++; } BufferedWriter bw1 = new BufferedWriter(new FileWriter(args[1])); BufferedWriter bw2 = new BufferedWriter(new FileWriter(args[2])); BufferedWriter bw3 = new BufferedWriter(new FileWriter(args[3])); //Iterating the array of contents using a for each loop for(String each:contents) { //Writing the string to the corresponding file which matches with the portNumber //along with a new line if (each.contains(portNumber1)) { bw1.write(each); bw1.newLine(); } else if(each.contains(portNumber2)) { bw2.write(each); bw2.newLine(); } else if(each.contains(portNumber3)) { bw3.write(each); bw3.newLine(); } } //This is necessary to finally output the text from the buffer to the corresponding file bw1.flush(); bw2.flush(); bw3.flush(); //Closing all the file reading and writing handles bw1.close(); bw2.close(); bw3.close(); s.close(); } } Here is my code, however, it only reads a file the size of 19 lines. I know i could use an ArrayList, but I'm not exactly sure how to go about it. I hope my question makes sense. If it'll help you understand better ill put the purpose of the code below.This image is of the instructions for what the code is written for. It might just be extra information, but I put it here in case it'll better help to explain my question.
3 Réponses :
remplacer avec p> et p> avec p> enfin, supprimer i code> et toutes les autres conditions et instructions en fonction de la valeur du
i code>. p> p> p>
Il suffit de remplacer votre tableau avec des lins de tableau comme ceci arraylist
[I] = S.Nextline (). Remplacez ("", ","); code> avec
list.add (S.Nextline (). Remplacer ("", "", ")); Code> Après cela, vous n'avez plus besoin de compter "i" et de vous casser en boucle en cas de condition. Il suffit d'ajouter
scanner.hasnext () code> dans une condition de temps. P>
Votre condition de boucle doit être basée sur scanner.hasnextline code> et vous n'avez pas besoin de la variable
i code>. Utilisez un
ArrayList CODE> pour marquer une quantité inconnue d'éléments.
final List<String> contents = Files.lines(Paths.get(args[0]))
.map(s->s.replace(" ", ",")).collect(Collectors.toList());
Les questions que vous devriez vraiment vous demander sont (a) pourquoi lisez-vous en ligne par ligne et (b) pourquoi stockez-vous les lignes dans un tableau? Si vous voulez simplement lire l'ensemble du contenu d'un fichier texte à afficher tel qu'il est, il vaut mieux lire le tout à la fois (voir l'API Fichiers pour cela). Si vous souhaitez traiter la ligne par ligne, vous pouvez le faire sans stocker dans un tableau / arraylist. Si vous lisez des paramètres pour un jeu, vous devez initialiser vos variables au lieu de créer une chaîne [] / ArrayList.