Программа должна считывать c консоли имена двух файлов.
Вроде все верно работает
package com.javarush.task.task17.task1721;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/*
Транзакционность
*/
public class Solution {
public static List<String> allLines = new ArrayList<String>();
public static List<String> forRemoveLines = new ArrayList<String>();
static FileInputStream f1;
static FileInputStream f2;
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
f1 = new FileInputStream(reader.readLine());
f2 = new FileInputStream(reader.readLine());
reader.close();
String s;
BufferedReader reader1 = new BufferedReader(new InputStreamReader(f1));
while (true) {
s = reader1.readLine();
if (s == null)
break;
allLines.add(s);
}
BufferedReader reader2 = new BufferedReader(new InputStreamReader(f2));
while (true) {
s = reader2.readLine();
if (s == null)
break;
forRemoveLines.add(s);
}
List<String> alllines2 = new ArrayList<>();
for (int i = 0; i < allLines.size(); i++) {
alllines2.add(allLines.get(i));
}
List<String> remove = new ArrayList<>();
{
for (int i = 0; i < forRemoveLines.size(); i++) {
remove.add(forRemoveLines.get(i));
}
}
try {
Solution c = new Solution();
c.joinData();
} catch (CorruptedDataException e) {
allLines = alllines2;
forRemoveLines = remove;
System.out.println(e.getMessage());
} finally {
reader1.close();
reader2.close();
}
}
catch (IOException e){
System.out.println(e.getMessage());
}
}
public void joinData() throws CorruptedDataException {
for (int i = 0; i < allLines.size(); i++) {
for (int j = forRemoveLines.size() - 1; j >= 0; j--) {
if (allLines.get(i).equals(forRemoveLines.get(j))) {
forRemoveLines.remove(j);
allLines.remove(i);
i--;
}
}
}
if (forRemoveLines.size() != 0) {
allLines.removeAll(allLines);
throw new CorruptedDataException();
}
}
}