в чем она здесь заключается? про суть отката при ошибке понятно, то есть, нужно представить ситуацию, что при переписывании строк из 1 файла(читаем первую строку - путь к файлу)->записываем в allLines и из 2 файлы(другая строка с консоли, отличающейся от 1 файла)->записываем в forRemoveLines из 1 файла данные из-за "сбоя" записались и в allLines и в forRemoveLines повторно (на них ведь делается проверка с выбросом ошибки)?
Сделать метод joinData транзакционным, т.е. если произошел сбой, то данные не должны быть изменены. то есть цель оставить списки пустыми?
public class Solution {
public static List<String> allLines = new ArrayList<String>();
public static List<String> forRemoveLines = new ArrayList<String>();
public static void main(String[] args) throws CorruptedDataException {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
allLines = Files.readAllLines(Paths.get(reader.readLine()));
forRemoveLines = Files.readAllLines(Paths.get(reader.readLine()));
} catch (IOException e) {
e.printStackTrace();
}
new Solution().joinData();
}
public void joinData() throws CorruptedDataException {
if (allLines.containsAll(forRemoveLines)) {
allLines.removeAll(forRemoveLines);
}
else {
allLines.clear();
throw new CorruptedDataException();
}
}
}