Несколько тестов погонял, записывает корректно. Хелп плиз.
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.HashMap;
import java.util.List;
import java.util.Map;
/*
Отслеживаем изменения
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<LineItem>();
public static void main(String[] args) throws IOException
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String [] filesName = new String[2];
for (int i = 0; i < 2; i++)
filesName[i] = in.readLine();
in.close();
FileReader tmp_1 = new FileReader(filesName[0]);
FileReader tmp_2 = new FileReader(filesName[1]);
BufferedReader input_1 = new BufferedReader(tmp_1);
BufferedReader input_2 = new BufferedReader((tmp_2));
Map<Integer, String> buff_1 = new HashMap<>();
Map <Integer, String> buff_2 = new HashMap<>();
int ik = 0;
while (input_1.ready() || input_2.ready())
{
buff_1.put(ik,input_1.readLine());
buff_2.put(ik,input_2.readLine());
ik++;
}
int j = 0;
for (int i = 0; ; i++)
{
try
{
if (buff_1.get(i).equals(buff_2.get(j)))
{
lines.add(new LineItem(Type.SAME,buff_1.get(i)));
}
if (!buff_1.get(i).equals(buff_2.get(j)))
{
if (buff_1.get(i).equals(buff_2.get(j+1)))
{
lines.add(new LineItem(Type.ADDED, buff_2.get(j)));
lines.add(new LineItem(Type.SAME, buff_1.get(i)));
j++;
}
if (buff_1.get(i+1).equals(buff_2.get(j)))
{
lines.add(new LineItem(Type.REMOVED,buff_1.get(i)));
lines.add(new LineItem(Type.SAME,buff_2.get(j)));
i++;
}
}
}
catch (NullPointerException e)
{
if (i > j)
lines.add(new LineItem(Type.REMOVED,buff_1.get(i)));
if (i <= j)
lines.add(new LineItem(Type.REMOVED,buff_2.get(j)));
break;
}
j++;
}
tmp_1.close();
tmp_2.close();
}
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;
}
}
}