Доброго времени суток, друзья. Может быть замылился сам, может быть валидатор слишком строг. Давайте разбираться вместе. Прайсы 2 CrUD для таблицы внутри файла Считать с консоли имя файла для операций CrUD Программа запускается с одним из следующих наборов параметров: -u id productName price quantity -d id Значения параметров: где id — 8 символов productName — название товара, 30 chars (60 bytes) price — цена, 8 символов quantity — количество, 4 символа -u — обновляет данные товара с заданным id -d — производит физическое удаление товара с заданным id (все данные, которые относятся к переданному id) В файле данные хранятся в следующей последовательности (без разделяющих пробелов): id productName price quantity Данные дополнены пробелами до их длины Пример: 19846 Шорты пляжные синие 159.00 12 198478 Шорты пляжные черные с рисунко173.00 17 19847983Куртка для сноубордистов, разм10173.991234 Требования: 1. Программа должна считать имя файла для операций CrUD с консоли. 2. При запуске программы без параметров список товаров должен остаться неизменным. 3. При запуске программы с параметрами "-u id productName price quantity" должна обновится информация о товаре в файле. 4. При запуске программы с параметрами "-d id" строка товара с заданным id должна быть удалена из файла. 5. Созданные для файлов потоки должны быть закрыты.
package com.javarush.task.task18.task1828;

import java.io.*;
import java.util.*;
/*
Прайсы 2
*/

public class Solution {
    public static List<String> lines;

    public static void main(String[] args) throws Exception {
        if (args.length != 0) {
            lines = new ArrayList<>();

            BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
            String fileName = consoleReader.readLine();
            consoleReader.close();

            try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
                while (reader.ready())
                    lines.add(reader.readLine());
            }

            switch (args[0]) {
                case "-u":
                    modifyLine(args);
                    break;

                case "-d":
                    removeLine(args);
                    break;
            }

            try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {
                for (String line : lines) {
                    writer.write(line);
                    writer.newLine();
                }
            }

            lines.clear();
        }
    }

    public static void modifyLine(String[] args) throws IllegalArgumentException {
        for (int i = 0; i < lines.size(); i++) {
            if (lines.get(i).startsWith(args[1])) {
                String id = args[1];
                String productName = args[2].length() > 30 ? args[2].substring(0, 30) : args[2];
                String price = args[3].length() > 8 ? args[3].substring(0, 8) : args[3];
                String quantity = args[4].length() > 4 ? args[4].substring(0, 4) : args[4];

                String result = String.format("%-8s%-30s%-8s%-4s", id, productName, price, quantity);
                lines.set(i, result);
                return;
            }
        }
        throw new IllegalArgumentException("id not found");
    }

    public static void removeLine(String[] args) throws IllegalArgumentException {
        for (int i = 0; i < lines.size(); i++) {
            if (lines.get(i).startsWith(args[1])) {
                lines.remove(i);
                return;
            }
        }
        throw new IllegalArgumentException("id not found");
    }
}