2016-09-08 1 views
1

J'essaie de copier le contenu d'un fichier inputFile dans plusieurs autres fichiers. J'essaye de faire ceci en utilisant des arguments de ligne de commande.Copie java en entrée de plusieurs fichiers de sortie

Cependant, j'ai quelques difficultés avec la fermeture de l'imprimeur. Je ne sais pas où ou comment je devrais le faire. Si je le fais dans ma boucle for, le contenu est copié uniquement dans un fichier de sortie. J'ai essayé une if-statement mais ça n'a pas marché non plus. Si je le ferme en dehors de la boucle for. Je reçois une erreur de symbole "impossible à trouver", ce qui est logique puisque je l'ai déclaré à l'intérieur de la boucle for.

Ma question est donc: Comment et où je suis supposé fermer l'imprimeur dans cette situation?

Merci à l'avance.

import java.util.*; 
import java.io.*; 
public class try13 { 
    public static void main(String[] args) throws FileNotFoundException { 
     File inputFile = new File(args[0]); 
     Scanner in = new Scanner(inputFile); 
     for(int i = 1; i < args.length; i++) { 
      PrintWriter out = new PrintWriter(args[i]); 
      while (in.hasNextLine()) { 
       String line = in.nextLine(); 
       out.println(line); 
      } 
     } 
     in.close(); 
     out.close(); 
    } 
} 
+0

Essayez-vous de diviser le fichier d'entrée en plusieurs fichiers de sortie, ou essayez-vous de copier l'ensemble du fichier d'entrée dans plusieurs fichiers de sortie? – Jason

+0

J'essaye de copier l'ensemble du fichier d'entrée dans plusieurs fichiers de sortie – Tezen

Répondre

0

Faites d'abord un tableau de la PrintWriters, puis copiez chaque ligne lue depuis l'entrée à toutes les sorties:

import java.util.*; 
import java.io.*; 
public class try13 { 
    public static void main(String[] args) throws FileNotFoundException { 
     File inputFile = new File(args[0]); 
     Scanner in = new Scanner(inputFile); 

     /* Create all the writers and put then in a list */ 
     List<PrintWriter> writers = new ArrayList<>(); 
     for(int i = 1; i < args.length; i++) { 
      writers.add(new PrintWriter(args[i])); 
     } 

     /* Read each line and write it to all writers */ 
     while (in.hasNextLine()) { 
      String line = in.nextLine(); 
      writers.forEach(writer -> writer.println(line)); 
     } 

     in.close(); 

     /* Close all the writers */ 
     writers.forEach(writer -> { 
       try { 
        writer.close(); 
       } catch(Exception e) {} 
     }); 
    } 
} 

Si vous n'utilisez pas Java8, essayez ceci:

/* Read each line and write it to all writers */ 
while (in.hasNextLine()) { 
    String line = in.nextLine(); 
    for(PrintWriter writer : writers) { 
     writer.println(line); 
    } 
} 

... et ceci:

/* Close all the writers */ 
for(PrintWriter writer : writers) { 
    try { 
     writer.close(); 
    } catch(Exception e) {} 
} 
+0

Wow, merci beaucoup monsieur. J'apprécie beaucoup cela. J'utilise Java8 donc ça a marché – Tezen

+0

De rien. N'hésitez pas à upvote. – Jason