java 将输入复制到多个输出文件

java copying input to multiple output files

我正在尝试将 inputFile 的内容复制到多个其他文件。我正在尝试使用命令行参数来执行此操作。

但是,我在关闭 printwriter 时遇到了一些困难。我不知道我应该在哪里或如何做。如果我在我的 for 循环中这样做,内容只会被复制到一个输出文件中。我尝试了一个 if 语句,但它也不起作用。如果我在 for 循环之外关闭它。我得到一个 'cannot find symbol error' 这是有道理的,因为我在 for 循环中声明了它。

因此我的问题是:在这种情况下,我应该如何以及在何处关闭 printwriter?

提前谢谢你。

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

首先制作 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) {}
}