私は以下を達成しようとしています。
次の内容の file1 と file 2 という 2 つのファイルがあるとします。
ファイル1:
header
d1
d2
ファイル2:
header
d3
d4
次に、マージされたファイルは
出力ファイル:
header
d1
d2
d3
d4
2 番目のファイルからヘッダーをスキップしていることに注意してください。Guava を使用して Java で次のコードを記述しました。
LinkedList<InputSupplier<BufferedReader>> listOfSuppliers =
new LinkedList<InputSupplier<BufferedReader>>();
boolean firstFile = true;
for (Path path : inputPaths) {
InputSupplier<BufferedReader> reader = newBufferedReaderSupplier(fs.open(path));
if (!firstFile) {
String ignored = reader.getInput().readLine();
LOGGER.info("Ignored header from the second file " + ignored);
}
listOfSuppliers.add(reader);
firstFile = false;
}
InputSupplier<Reader> combined = CharStreams.join(listOfSuppliers);
OutputSupplier<OutputStreamWriter> outputStream
= Files.newWriterSupplier(output, Charsets.UTF_8, false);
CharStreams.copy(combined, outputStream);
このコードの問題は、ヘッダーをスキップすると、出力ファイルに 2 番目のファイルの内容がないことです。BufferedReader がファイル全体を無視するようなことをしていると思います。
これを修正する方法を考えられますか?