- Убедись, что поток чтения из первого файла закрыт.
- Убедился, глядя на 40-ую строку моего кода.
Что делать дальше не понятно - долго голову ломал на этой задаче не хочется дебажить валидатор расходуя попытки :)
package com.javarush.task.task19.task1916;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
/*
Отслеживаем изменения
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<LineItem>();
public static void main(String[] args) throws IOException {
/*Запрашиваем имена файлов*/
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String file1 = br.readLine();
String file2 = br.readLine();
br.close();
/*Заполняем строками из файлов массивы*/
ArrayList<String> origin = new ArrayList<>();
ArrayList<String> updated = new ArrayList<>();
FileReader fr1 = new FileReader(file1);
FileReader fr2 = new FileReader(file2);
BufferedReader bf1 = new BufferedReader(fr1);
BufferedReader bf2 = new BufferedReader(fr2);
while (bf1.ready()) {
origin.add(bf1.readLine());
}
while (bf2.ready()) {
updated.add(bf2.readLine());
}
bf2.close();
bf1.close();
fr2.close();
fr1.close();
/*Проверка заполнения массивов
System.out.println("Origin:");
for (String s : origin) {
System.out.println(s);
}
System.out.println("Updated:");
for (String s : updated) {
System.out.println(s);
}*/
int i = 0;
while (true) {
if ((i + 1) <= updated.size() & (i + 1) <= origin.size()) {
if (!origin.get(i).equals(updated.get(i))) {
if (origin.get(i + 1).equals(updated.get(i))) {
updated.add(i, "#");
} else {
origin.add(i, "#");
}
}
} else {
if ((i + 1) > updated.size()) {
updated.add("#");
break;
} else {
origin.add("#");
break;
}
}
i++;
}
/*Проверка обработки массивов
System.out.println("Origin:");
for (String s : origin) {
System.out.println(s);
}
System.out.println("Updated:");
for (String s : updated) {
System.out.println(s);
}*/
for (int j = 0; j <= origin.size() - 1; j++) {
if (origin.get(j).equals(updated.get(j))) {
lines.add(new LineItem(Type.SAME, origin.get(j)));
} else if (!origin.get(j).equals("#") & updated.get(j).equals("#")) {
lines.add(new LineItem(Type.REMOVED, origin.get(j)));
} else if (origin.get(j).equals("#") & !updated.get(j).equals("#")) {
lines.add(new LineItem(Type.ADDED, updated.get(j)));
}
}
/*Проверка результата
for (LineItem l : lines) {
System.out.println(l);
}*/
}
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;
}
public String toString() {
return this.type + " " + this.line;
}
}
}