ПРИНЯТОЕ РЕШЕНИЕ:
package com.javarush.test.level17.lesson10.home09; import java.io.*; import java.util.*; /* Транзакционность Сделать метод joinData транзакционным, т.е. если произошел сбой, то данные не должны быть изменены. 1. Считать с консоли 2 имени файла 2. Считать построчно данные из файлов. Из первого файла - в allLines, из второго - в forRemoveLines В методе joinData: 3. Если список allLines содержит все строки из forRemoveLines, то удалить из списка allLines все строки, которые есть в forRemoveLines 4. Если список allLines НЕ содержит каких-либо строк, которые есть в forRemoveLines, то 4.1. очистить allLines от данных 4.2. выбросить исключение CorruptedDataException Метод joinData должен вызываться в main. Все исключения обработайте в методе main. */ 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 IOException{ String fileName1, fileName2; BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); fileName1 = reader.readLine(); fileName2 = reader.readLine(); reader.close(); BufferedReader reader1 = new BufferedReader(new FileReader(fileName1)); String line = null; while ((line = reader1.readLine()) != null) { allLines.add(line); } reader1.close(); BufferedReader reader2 = new BufferedReader(new FileReader(fileName2)); line = null; while ((line = reader2.readLine()) != null) { forRemoveLines.add(line); } reader2.close(); new Solution().joinData(); } public void joinData () throws CorruptedDataException { if (allLines.containsAll(forRemoveLines)) { allLines.removeAll(forRemoveLines); } else { allLines.clear(); throw new CorruptedDataException(); } } }
МОЁ РЕШЕНИЕ:
package com.javarush.test.level17.lesson10.home09; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; /* Транзакционность Сделать метод joinData транзакционным, т.е. если произошел сбой, то данные не должны быть изменены. 1. Считать с консоли 2 имени файла 2. Считать построчно данные из файлов. Из первого файла - в allLines, из второго - в forRemoveLines В методе joinData: 3. Если список allLines содержит все строки из forRemoveLines, то удалить из списка allLines все строки, которые есть в forRemoveLines 4. Если список allLines НЕ содержит каких-либо строк, которые есть в forRemoveLines, то 4.1. очистить allLines от данных 4.2. выбросить исключение CorruptedDataException Метод joinData должен вызываться в main. Все исключения обработайте в методе main. */ 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 IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); File aL = new File(reader.readLine()); File fRL = new File(reader.readLine()); Scanner scaL = new Scanner(aL); while(scaL.hasNext()) { allLines.add(scaL.next()); } //System.out.println("allLines:"); //System.out.println(allLines.toString()); Scanner scfRL = new Scanner(fRL); while(scfRL.hasNext()) { forRemoveLines.add(scfRL.next()); } //System.out.println("forRemoveLines:"); //System.out.println(forRemoveLines.toString()); //System.out.println("-"); new Solution().joinData(); } public void joinData() throws CorruptedDataException { List<String> tempList = new ArrayList<>(); for (String forRemoveLine : forRemoveLines) { for (String allLine : allLines) { if (forRemoveLine.equals(allLine)) tempList.add(forRemoveLine); } } //System.out.println("tempList: " + tempList.toString()); //System.out.println("forRemoveLines: " + forRemoveLines.toString()); if (tempList.toString().equals(forRemoveLines.toString())) { Iterator<String> iterator = allLines.iterator(); while(iterator.hasNext()) { String tempI = iterator.next(); for (String forRemoveLine : forRemoveLines) { if (tempI.equals(forRemoveLine)) { //System.out.println("deleting: " + tempI); iterator.remove(); } } } //System.out.println("allLines: " + allLines.toString()); /* транзакционная перезапись файла!!! try { Formatter f = new Formatter("tempNumbs.txt"); for (String s : allLines) { System.out.println(s); f.format("%s\r\n", s); } f.close(); } catch (Exception e) { System.out.println("Error"); } aL.delete(); File tempFile = new File("tempNumbs.txt"); File newFile = new File(aL.toString()); if (tempFile.renameTo(newFile)) System.out.printf("renamed to %s\r\n", aL.toString()); else System.out.println("didn't renamed"); */ /* InputStream is; //стандартное копирование файла через поток. прям бери и вставляй в код OutputStream os; try { is = new FileInputStream(aL); os = new FileOutputStream("tempNumbs.txt"); byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) > 0) { os.write(buffer, 0, length); } } catch (IOException e) { System.out.println("IOException"); } */ } else { allLines.clear(); //System.out.println("allLines new: " + allLines.toString()); throw new CorruptedDataException(); } } }
Leave A Comment