Вроде все норм считаю по строчокам и чекаю файл
Спасибо
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
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("file.txt"));
BufferedReader input = new BufferedReader(new FileReader(nameFile)); // Поток для считавание строк из файла МИНУС НЕ ПРОВЕРЯЯЕМ НАЛИЧИЕ ФАЙЛА
String line; // обевляем строку куда будем считыват строки из фала
while ((line = input.readLine()) != null) { // считываем пока не будет нулл
String idString = ""; // временые переменая айди продукта для заноса в массив
String productName = ""; // временая переменая названия продука для заносу а массив
String price = ""; // временая переменая для заноса цены в массив
String quantity = ""; // временая переменая для заноса количеств ав массив
// System.out.println(last);
// МИНУС НЕ ПРОВЕРЯЕМ ОБЩУЮ ДЛИНУ СТРОКИ ЧТОБЫ ВЫДАТЬ ОШИБКУ СЧИТЫВАНИЯ
for (int i = 0; i < 8; i++) { // вытаскиваем из строки файла базы продуктов айди
if (line.charAt(i) == ' ') continue;
idString = (idString + line.charAt(i));
}
for (int i = 8; i < 38; i++) { // вытаскиваекм из строки файла название продукта
productName = (productName + line.charAt(i));
}
for (int i = 38; i < 46; i++) { // вытаскиваем из строки файла цену
price = (price + line.charAt(i));
}
for (int i = 46; i < 50; i++) { // вытаскиваем из строки файла количество
quantity = (quantity + line.charAt(i));
}
Product product = new Product(idString, productName, price, quantity); // передаем все в обект который статик создан ниже
// System.out.println(idString);
// System.out.println(productName);
// System.out.println(price);
// System.out.println(quantity);
products.add(product); // добовляем обект в массив
}
reader.close(); // закрываем поток
input.close(); // закрываем поток
boolean control = false; // переменая контроля что бы после парсинга аргумента мы перезаписывали файл
switch (args[0]) { //-u id productName price quantity
// МИНУС НЕ ПРОВЕРЯМ ЧТО АРГУМЕНТ МОЖЕТ БЫТЬ БОЛЬШЕ НУЖНОГО КОЛИЧСТВА СИМВОЛОВ
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] + " ");
// System.out.println(args[2]);
} else break;
}
while (true) { // цикл на считыванеи цены и добовление пробелов
if (args[3].length() < 8) {
args[3] = (args[3] + " ");
// System.out.println(args[3]);
} else break;
}
while (true) { // цикл на считывания колчичества и добовления пробелов
if (args[4].length() < 4) {
args[4] = (args[4] + " ");
// System.out.println(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];
System.out.println(args[1].length());
System.out.println(args[2].length());
System.out.println(args[3].length());
System.out.println(args[4].length());
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;
}
}
}
FileWriter fileWriter = new FileWriter(nameFile); // Открываем поток для записи файла
if (control == true) { // Меняем только если есть изменнеия
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;
}
}
}