2016-09-08 1 views
1

Я пытаюсь скопировать содержимое inputFile в несколько других файлов. Я пытаюсь сделать это с помощью аргументов командной строки.java копирование ввода в несколько выходных файлов

Однако у меня возникают некоторые трудности с закрытием принтера. Я не знаю, где и как я должен это делать. Если я делаю это в своем for-loop, содержимое только копируется в один выходной файл. Я попробовал if-statement, но это тоже не сработало. Если я закрою его вне цикла for. Я получаю сообщение «не могу найти ошибку символа», что имеет смысл, так как я объявил его внутри цикла for.

Мой вопрос таким образом: Как и где я должен закрыть принтер в этой ситуации?

Заранее спасибо.

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

Вы пытаетесь разбить входной файл на несколько выходных файлов или пытаетесь скопировать весь входной файл в несколько выходных файлов? – Jason

+0

Я пытаюсь скопировать весь входной файл в несколько выходных файлов – Tezen

ответ

0

Сначала сделайте массив из PrintWriters, а затем скопировать каждую строку, считанную из входных данных для всех выходов:

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) {} 
     }); 
    } 
} 

Если вы не используете Java8, попробуйте следующее:

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

... и это:

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

Вау, большое вам спасибо. Я действительно ценю это. Я использую Java8, поэтому он работал – Tezen

+0

Добро пожаловать. Не стесняйтесь повышать. – Jason