Решил попробовать обойти работу со списками и построчно сравнивать оба файла. Все строчки, кроме первой и последней отрабатывают нормально.
Первая строчка в обоих файлах = "it's a text for testing", но, line1.equals(line2) = false.
Последняя строчка во втором файле пустая (но есть), при этом (fileReader1.ready() && fileReader2.ready()) триггерит и на последней строчке выходит из цикла
package com.javarush.task.task19.task1916;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/*
Отслеживаем изменения
Считать с консоли 2 имени файла - file1, file2.
Файлы содержат строки, file2 является обновленной версией file1, часть строк совпадают.
Нужно создать объединенную версию строк, записать их в список lines.
Операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME.
Пустые строки даны в примере для наглядности.
В оригинальном и редактируемом файлах пустых строк нет!
Пример 1:
оригинальный редактированный общий
file1: file2: результат:(lines)
строка1 строка1 SAME строка1
строка2 REMOVED строка2
строка3 строка3 SAME строка3
строка4 REMOVED строка4
строка5 строка5 SAME строка5
строка0 ADDED строка0
строка1 строка1 SAME строка1
строка2 REMOVED строка2
строка3 строка3 SAME строка3
строка4 ADDED строка4
строка5 строка5 SAME строка5
строка0 REMOVED строка0
Пример 2:
оригинальный редактированный общий
file1: file2: результат:(lines)
строка1 строка1 SAME строка1
строка0 ADDED строка0
Пустые строки в примере означают, что этой строки нет в определенном файле.
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<LineItem>();
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String file1Path = reader.readLine();
String file2Path = reader.readLine();
reader.close();
BufferedReader fileReader1 = new BufferedReader(new FileReader(file1Path));
BufferedReader fileReader2 = new BufferedReader(new FileReader(file2Path));
while(fileReader1.ready() && fileReader2.ready()) {
String line1File = fileReader1.readLine();
String line2File = fileReader2.readLine();
if(line1File.length() == 0 && line2File.length() != 0) {
lines.add(new LineItem(Type.ADDED, line2File));
}
if(line2File.length() == 0 && line1File.length() != 0) {
lines.add(new LineItem(Type.REMOVED, line1File));
}
if(line1File.equals(line2File)) {
lines.add(new LineItem(Type.SAME, line1File));
}
}
fileReader1.close();
fileReader2.close();
for(LineItem line: lines) {
System.out.println(line.line + " " + line.type);
}
}
public static enum Type {
ADDED, //добавлена новая строка
REMOVED, //удалена строка
SAME //без изменений
}
public static class LineItem {
public Type type;
public String line;
public LineItem(Type type, String line) {
this.type = type;
this.line = line;
}
}
}