CharStreams.join方法可以处理InputSupplier实例并组合他们,使得他们在逻辑上看起来像是一个InputSupplier实例。
@Test
public void joinTest() throws Exception {
File f1 = new File("src/main/resources/sampleTextFileOne.txt");
File f2 = new File("src/main/resources/sampleTextFileTwo.txt");
File f3 = new File("src/main/resources/lines.txt");
File joinedOutput = new File("src/test/resources/joined.txt");
joinedOutput.deleteOnExit();
List<InputSupplier<InputStreamReader>> inputSuppliers = getInputSuppliers(f1,f2,f3);
InputSupplier<Reader> joinedSupplier = CharStreams.join(inputSuppliers());
OutputSupplier<OutputStreamWriter> outputSupplier = Files.newWriterSupplier(joinedOutput, Charsets.UTF_8);
String expectedOutputString = joinFiles(f1,f2,f3);
CharStreams.copy(joinedSupplier,outputSupplier);
String joinedOutputString = joinFiles(joinedOutput);
assertThat(joinedOutputString,is(expectedOutputString));
}
private String joinFiles(File ...files) throws IOException {
StringBuilder builder = new StringBuilder();
for (File file : files) {
builder.append(Files.toString(file,Charsets.UTF_8));
}
return builder.toString();
}
private List<InputSupplier<InputStreamReader>> getInputSuppliers()(File ...files){
List<InputSupplier<InputStreamReader>> list = Lists.newArrayList();
for (File file : files) {
list.add(Files.newReaderSupplier(file,Charsets.UTF_8));
}
return list;
}