マージ関数を実装する
このステップでは、入力ファイルのコンテンツをマージする merge
関数を実装します。
-
/home/labex/project
ディレクトリ内の FileMerge.java
ファイルを開きます。
-
merge
関数を見つけて、既存のコードを以下の実装で置き換えます。
public static void merge(String[] sourcePath, String outPath) throws IOException {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(outPath))) {
BufferedReader[] readers = new BufferedReader[sourcePath.length];
String[] currentLines = new String[sourcePath.length];
boolean[] fileEmpty = new boolean[sourcePath.length];
// 各ソースファイルに対してリーダーを開く
for (int i = 0; i < sourcePath.length; i++) {
readers[i] = new BufferedReader(new FileReader(sourcePath[i]));
currentLines[i] = readers[i].readLine();
fileEmpty[i] = (currentLines[i] == null);
}
// 各ファイルの行をマージする
boolean allFilesEmpty = false;
while (!allFilesEmpty) {
allFilesEmpty = true;
for (int i = 0; i < sourcePath.length; i++) {
if (!fileEmpty[i]) {
writer.write(currentLines[i]);
writer.newLine();
currentLines[i] = readers[i].readLine();
fileEmpty[i] = (currentLines[i] == null);
allFilesEmpty = false;
}
}
}
// リーダーを閉じる
for (BufferedReader reader : readers) {
reader.close();
}
}
}
この実装では、各入力ファイルに対して BufferedReader
を開き、各ファイルから行を読み取り、交互に行を出力ファイルに書き込みます。ファイルにもう行がない場合、すべてのファイルのすべての行が出力ファイルに書き込まれるまで、そのファイルはスキップされます。