Я к сожалению не знаю как изменить прошлый вопрос поэтому создаю новый
что я подправил из прошлого
При чтении файла пропускаются пробелы, а значит итоговый idString может быть 3 цифры
не пиши так много комментариев. если у тебя имена переменных и методов выбраны правильно, то итак будет всё понятно.
для таких вещей есть substring()
это зачем? тебе в любом случае файл перезаписывать если заданный id найден
boolean control = false; а если он не найден я просто не помню если мы обьявили булеан то вроде он фалш по умолчанию но я для достоверности тыкнул ему в нос что он отрицателныцй
ты вначале проверь, а надо ли тебе перезаписывать файл. а потом только открывай поток. иначе при открытии потока у тебя файл перетрется. даже если тебе писать туда не надо.
package com.javarush.task.task18.task1828;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/*
Прайсы 2
*/
public class Solution {
public static void main(String[] args) throws IOException {
//args = new String[]{"-u", "12341232", "cap", "122", "12"}; //-u id productName price quantity
// args = new String[]{"-d", "12341232"};
List<Product> products = new ArrayList<>();
if (args.length != 0) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String nameFile = reader.readLine();
BufferedReader input = new BufferedReader(new FileReader(nameFile));
String line;
while ((line = input.readLine()) != null) { // считываем пока не будет нулл все строки из файла
String idString = line.substring(0, 8);
String productName = line.substring(8, 38);
String price = line.substring(38, 46);
String quantity = line.substring(46, 50);
Product product = new Product(idString, productName, price, quantity);
products.add(product);
}
reader.close();
input.close();
boolean control = false; // переменая контроля что бы после парсинга аргумента мы перезаписывали файл
// Если она false мы не упали не в 1 из case и файл не надо перезаписывать
switch (args[0]) {
// МИНУС НЕ ПРОВЕРЯМ ЧТО АРГУМЕНТ МОЖЕТ БЫТЬ БОЛЬШЕ НУЖНОГО КОЛИЧСТВА СИМВОЛОВ
case ("-u"):
while (true) { // цикл на считыванеи id и добовление пробелов
if (args[1].length() < 8) {
args[1] = (args[1] + " ");
System.out.println(args[1]);
} else break;
}
while (true) { // цикл на считывание названия продукта и добовление пробелов
if (args[2].length() < 30) {
args[2] = (args[2] + " ");
} else break;
}
while (true) { // цикл на считыванеи цены и добовление пробелов
if (args[3].length() < 8) {
args[3] = (args[3] + " ");
} else break;
}
while (true) { // цикл на считывания колчичества и добовления пробелов
if (args[4].length() < 4) {
args[4] = (args[4] + " ");
} else break;
}
for (int i = 0; i < products.size(); i++) //Добовляем продукт в массив при замене аргумента
if (products.get(i).id.equals(args[1])) {
products.get(i).productName = args[2];
products.get(i).price = args[3];
products.get(i).quantity = args[4];
break;
}
control = true; // устанавливаем контроль что да мы будем менять файл
break;
case ("-d"):
for (int i = 0; i < products.size(); i++) {
if (products.get(i).id.equals(args[1])) {
products.remove(i);
control = true; // Устанавлияваем котнтроль что да мы будем менять файл
break;
}
}
}
if (control == true) { // Меняем только если есть изменнеия
FileWriter fileWriter = new FileWriter(nameFile);
for (int i = 0; i < products.size(); i++) {
fileWriter.write(products.get(i).id + products.get(i).productName + products.get(i).price + products.get(i).quantity);
fileWriter.append(System.lineSeparator());
}
fileWriter.flush();
fileWriter.close();
}
}
}
public static class Product { // класс для масива продуктс
String id;
String productName;
String price;
String quantity;
Product(String id, String productName, String price, String quantity) {
this.id = id;
this.productName = productName;
this.price = price;
this.quantity = quantity;
}
}
}