2
votes

Lisez N lignes du fichier et enregistrez-le dans un nouveau fichier

Comment faire, par exemple, lire 20 lignes depuis readFile ou n lignes et l'enregistrer dans un autre fichier ( writeFile )?

public class Test_read_file {
  public static List<String> readFile() throws IOException {
    try(BufferedReader br = new BufferedReader(new FileReader("C:\\\\\\\\Users\\\\\\\\Admin\\\\\\\\Desktop\\\\\\\\Work Files\\\\\\\\314-WO0000001133814\\\\\\\\Cards\\\\\\\\MBD10760_182.out"))){
        List<String> listOfData = new ArrayList<>();
        String d;
        while((d = br.readLine()) != null){
            listOfData.add(d);
        }
        return listOfData;
    }
}

public static void writeFile(List<String> listOfData) throws IOException{
    try(BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\\\\\\\Users\\\\\\\\Admin\\\\\\\\Desktop\\\\\\\\Work Files\\\\\\\\314-WO0000001133814\\\\\\\\Cards\\\\\\\\MBD10760_187.out"))){
        for(String str: listOfData){
            bw.write(str);
            bw.newLine();
        }
    }
}

public static void main(String[] args) throws IOException {
    List<String> data = readFile();
    writeFile(data);
}
}


1 commentaires

Découvrez comment faire cela à partir d'une application de ligne de commande. et il sera facile de l'intégrer dans une application de bureau. En d'autres termes, cela n'a rien à voir avec Swing. Veuillez choisir les balises avec soin.


3 Réponses :


1
votes

Ajoutez simplement à lors de la vérification de la taille de listOfData:

 while( ((d = br.readLine()) != null) && listOfData.size()<20 ) {
            listOfData.add(d);
}


0 commentaires

3
votes

En supposant que votre code fonctionne correctement:

public static List<String> readFile(int n) throws IOException {
    try(BufferedReader br = new BufferedReader(new 
FileReader("C:\\\\\\\\Users\\\\\\\\Admin\\\\\\\\Desktop\\\\\\\\Work Files\\\\\\\\314- 
WO0000001133814\\\\\\\\Cards\\\\\\\\MBD10760_182.out"))){
        List<String> listOfData = new ArrayList<>();
        String d;
        while((d = br.readLine()) != null && n>0){
            listOfData.add(d);
            n--;
        }
        return listOfData;
    }

Il vous suffit d'indiquer à la boucle le nombre de lignes qu'elle doit lire. Si le fichier contient moins de n lignes, la première instruction de la boucle while renverra null et interrompra la boucle. Sinon, quand il lit n nombre de lignes, il cassera à nouveau la boucle grâce à la deuxième instruction dans la boucle while.


3 commentaires

Comment faire pour lire ce n nombre ou n à donner par variable?


Si vous regardez la signature de méthode, je l'ai donnée avec le paramètre de méthode.


ouais je l'ai fait, maintenant je dois l'implémenter dans java swing gui je pense que je vais travailler avec ce code



0
votes
 public static void main(String[] args) throws IOException {
     Path pathFrom = Paths.get("C:\\Users\\Admin\\Desktop\\Work Files\\314-WO0000001133814\\Cards\\MBD10760_182.out\"");
     Path pathTo = Paths.get("C:\\Users\\Admin\\Desktop\\Work Files\\314-WO0000001133814\\Cards\\MBD10760_187.out\"");
     Files.write(pathTo, Files.lines(pathFrom).limit(20).collect(Collectors.toList()));
 }

1 commentaires

readAllLines () lit littéralement toutes les lignes. Cela peut être un problème de performances lorsque le fichier d'entrée est volumineux. Une meilleure solution serait probablement d'utiliser l'API Stream (à condition que l'OP puisse utiliser Java 8) et simplement limit () au nombre de lignes souhaité.