Не совсем понятно, зачем в правильном решении вызывают метод .substring(0, 8).trim(). Ведь substring и так возвращает обрезанный string. Сделал без .trim и все работает корректно. Прайсы 2 CRUD для таблицы внутри файла. Напиши программу, которая считывает с консоли путь к файлу для операций CRUD и при запуске в зависимости от флага, переданного в параметрах обновляет данные товара с заданным id или производит физическое удаление товара с заданным id (удаляет из файла все данные, которые относятся к переданному id). -u id productName price quantity -d id Значения параметров: -u - флаг, который означает обновление данных товара с заданным id -d - флаг, который означает физическое удаление товара с заданным id (из файла удаляются все данные, которые относятся к переданному id) id - id товара, 8 символов productName - название товара, 30 символов price - цена, 8 символов quantity - количество, 4 символа В файле данные хранятся в следующей последовательности (без разделяющих пробелов): id productName price quantity Данные дополнены пробелами до их длины. Для чтения и записи файла нужно использовать FileReader и FileWriter соответственно. Пример содержимого файла: 19847 Шорты пляжные синие 159.00 12 198479 Шорты пляжные черные с рисунко173.00 17 19847983Куртка для сноубордистов, разм10173.991234 Requirements: 1. Программа должна считать имя файла для операций CRUD с консоли. 2. При запуске программы без параметров список товаров должен остаться неизменным. 3. При запуске программы с параметрами "-u id productName price quantity" должна обновится информация о товаре в файле. 4. При запуске программы с параметрами "-d id" строка товара с заданным id должна быть удалена из файла. 5. Созданные для файлов потоки должны быть закрыты.
public class Solution {
    public static class Product {
        private int id;
        private String productName;
        private String price;
        private String quantity;
        public Product(int id, String productName, String price, String quantity) {
            this.id = id;
            this.productName = productName;
            this.price = price;
            this.quantity = quantity;
        }

        @Override
        public String toString() {
            return String.format("%-8d%-30s%-8s%-4s", id, productName, price, quantity);
        }
    }

    public static Product getProduct(String string) {
        String uncuttedId = string.substring(0, 8);
        StringBuilder id = new StringBuilder();
        for (int n = 0; n < uncuttedId.length(); n++) {
            if (Character.isDigit(uncuttedId.charAt(n))) {
                id.append(uncuttedId.charAt(n));
            }
        }
        String productName = string.substring(8, 38);
        String price = string.substring(38, 46);
        String quantity = string.substring(46, 50);
        return new Product(Integer.parseInt(id.toString()), productName, price, quantity);
    }

    public static void main(String[] args) throws IOException {
        if (args.length > 0) {
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
            String filename = bufferedReader.readLine();

            ArrayList<Product> products = new ArrayList<>();

            try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
                while (reader.ready()) {
                    String productAsLine = reader.readLine();
                    products.add(getProduct(productAsLine));
                }
            }
            switch (args[0]) {
                case "-u":
                    try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename, true));
                         BufferedWriter cleaner = new BufferedWriter(new FileWriter(filename))) {
                        int newId = Integer.parseInt(args[1]);
                        StringBuilder stringbuilder = new StringBuilder();
                        for (int n = 2; n < args.length - 2; n++) {
                            stringbuilder.append(args[n]).append(" ");
                        }
                        String newProductName = String.format("%-30.30s", stringbuilder.toString());
                        String newPrice = String.format("%-8.8s", args[args.length - 2]);
                        String newQuantity = String.format("%-4.4s", args[args.length - 1]);
                        cleaner.write("");

                        for (Product product : products) {
                            if (product.id == newId) {
                                product.productName = newProductName;
                                product.price = newPrice;
                                product.quantity = newQuantity;
                            }
                            writer.append(product.toString());
                            writer.newLine();
                        }
                        break;
                    }
                case "-d":
                    int deteleId = Integer.parseInt(args[1]);
                    try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) {
                        int indexToDelete = 0;
                        for (Product product : products) {
                            if (product.id == deteleId) {
                                indexToDelete = products.indexOf(product);
                            }
                        }
                        products.remove(indexToDelete);
                        for (Product product : products) {
                            writer.append(product.toString());
                            writer.newLine();
                        }
                    }
                    break;
            }
        }
    }
}