Вроде, всё работает, как надо, но, видимо, что-то я не так понял в задании. Если args[0] - "-u", то я копирую весь текст в String, по пути ищу совпадение по id. Если совпадение есть, то меняю всю строчку из текста на новую (всё, как положено, честь по чести обработанную). Потом переписываю в файл обработанный текст. Если args[0] - "-d", то проделываю похожий фокус, только удаляю строчку, будто и не было её.
package com.javarush.task.task18.task1828;
import java.io.*;
public class Solution {
public static void main(String[] args) {
String fileName = getFileName();
String text = "";
switch (args[0]) {
case "-u":
String newLine = getNewline(args[1], args[2], args[3], args[4]);
text = textAfterUpdates(fileName, newLine);
writeToFile(fileName, text);
break;
case "-d":
text = textAfterRemoval(fileName, args[1]);
writeToFile(fileName, text);
break;
}
}
public static String getFileName() {
String fileName = "";
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in))) {
fileName = bufferedReader.readLine();
} catch (IOException e) {
System.out.println("IOException in method getFileName");
}
return fileName;
}
public static String getNewline(String id, String productName, String price, String quantity) {
String line = String.format("%-8.8s%-30.30s%-4.4s%-8.8s", id, productName, price, quantity);
return line;
}
public static String textAfterUpdates(String fileName, String newLine) {
String text = "";
String line = "";
try (FileReader fileReader = new FileReader(fileName);
BufferedReader bufferedReader = new BufferedReader(fileReader)) {
while ((line = bufferedReader.readLine()) != null) {
text += line.substring(0, 8).equals(newLine.substring(0, 8)) ? (newLine + '\n') : (line + '\n');
}
} catch (IOException e) {
System.out.println("IOException in method getNewText");
}
return text.trim();
}
public static String textAfterRemoval(String fileName, String id) {
String text = "";
String line = "";
id = String.format("%-8.8s", id);
try (FileReader fileReader = new FileReader(fileName);
BufferedReader bufferedReader = new BufferedReader(fileReader)) {
while ((line = bufferedReader.readLine()) != null) {
if (line.substring(0, 8).equals(id)) continue;
text += line + '\n';
}
} catch (IOException e) {
System.out.println("IOException in method getNewText");
}
return text.trim();
}
public static void writeToFile(String fileName, String text) {
try (FileWriter fileWriter = new FileWriter(fileName);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter)) {
bufferedWriter.write(text);
} catch (IOException e) {
System.out.println("IOException in method writeToFile");
}
}
}