我想達到以下效果。番石榴+合併多個文件並跳過重複的標題
假設我們有兩個文件 - 文件1和文件2具有以下內容
文件1:
header
d1
d2
文件2:
header
d3
d4
然後合併後的文件應該是
輸出文件:
header
d1
d2
d3
d4
請注意,我們正在跳過第二個文件的標題。我使用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);
這段代碼的問題是,當我們跳過標題時,輸出文件沒有來自第二個文件的內容。我認爲BufferedReader正在做一些導致整個文件被忽略的東西。
想法如何解決這個問題?
我對Guava類沒有把握,但來自Java NIO的'Files'有一個'readAllLines'方法,它返回'List'。在每個文件上使用它。清除第二行的第一行並追加兩個列表。然後將它們寫入文件。 –