Почему не стал использовать для чтения из файла BufferedReader? Да потому что в требованиях написано использовать FileReader, больше просто так я валидатору не доверяю :)
Тестировал на вариантах из условия, ну еще и на таком:
Файл 1: Файл 2:
строка1 строка1
строка2
Накидайте еще вариантов для теста
package com.javarush.task.task19.task1916;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/*
Отслеживаем изменения
C:\Users\kerel\Desktop\JAVA\fortesting\Test1.txt
*/
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));
FileReader fileReader1 = new FileReader(reader.readLine());
FileReader fileReader2 = new FileReader(reader.readLine());
reader.close();
ArrayList<String> fromfile1 = new ArrayList<>();
ArrayList<String> fromfile2 = new ArrayList<>();
/*BufferedReader readerFile = new BufferedReader(fileReader);
BufferedWriter writerFile = new BufferedWriter(fileWriter);*/
String line1 = "";
while (fileReader1.ready()) {
char r;
while ((fileReader1.ready()) && ((r = (char) fileReader1.read()) != '\r' || (r = (char) fileReader1.read()) != '\n')) {
line1 += r;
}
if (!line1.equals("")) fromfile1.add(line1);
line1 = "";
}
fileReader1.close();
String line2 = "";
while (fileReader2.ready()) {
char r;
while ((fileReader2.ready()) && ((r = (char) fileReader2.read()) != '\r' || (r = (char) fileReader2.read()) != '\n')) {
line2 += r;
}
if (!line2.equals("")) fromfile2.add(line2);
line2 = "";
}
fileReader2.close();
if (fromfile1.size() > fromfile2.size()) {
while (fromfile2.size() != fromfile1.size()) fromfile2.add("Z");
} else if (fromfile1.size() < fromfile2.size()) {
while (fromfile1.size() != fromfile2.size()) fromfile1.add("Z");
}
for (int i = 0; i < fromfile1.size(); i++) {
if (fromfile1.get(i).equals(fromfile2.get(i))) lines.add(new LineItem(Type.SAME, fromfile1.get(i)));
else if (fromfile1.get(i).equals("Z")) {
lines.add(new LineItem(Type.ADDED, fromfile2.get(i)));
}
else if (fromfile2.get(i).equals("Z")) {
lines.add(new LineItem(Type.REMOVED, fromfile1.get(i)));
}
else if (fromfile1.get(i).equals(fromfile2.get(i+1))) {
lines.add(new LineItem(Type.ADDED, fromfile2.get(i)));
fromfile1.add(i,"Z");
}
else if (fromfile2.get(i).equals(fromfile1.get(i+1))) {
lines.add(new LineItem(Type.REMOVED, fromfile1.get(i)));
fromfile2.add(i, "Z");
}
}
}
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;
}
}
}