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. Созданные для файлов потоки должны быть закрыты. Перемудрил конечно. Не привык еще к StringBuilder, format, RegEx. Но я так понимаю дело не в них, поскольку предыдущую задачу валидатор принял. Валидатор ругается на 3-й пункт "При запуске программы с параметрами "-u id productName price quantity" должна обновится информация о товаре в файле.". Все остальное выполнено (даже удаление). В моих проверках вроде этот пункт выполняется. Подскажите что исправить?
public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String filename = reader.readLine();
        reader.close();
        FileInputStream is = new FileInputStream(filename);
        byte[] start = new byte[is.available()];
        is.read(start);
        is.close();
        String s1 = new String(start, "ASCII");
        String[] s2 = s1.split("\\n");
        char[] numbers = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
        int arg = Integer.parseInt(args[1]);
        if (args[0].equals("-u")){
            //Создаю строку для замены
            if (args[1].length() < 8) for (int d = 8 - args[1].length(); d > 0; d--) args[1] = args[1] + " ";
            if (args[2].length() < 30) for (int d = 30 - args[2].length(); d > 0; d--) args[2] = args[2] + " ";
            if (args[3].length() < 8) for (int d = 8 - args[3].length(); d > 0; d--) args[3] = args[3] + " ";
            if (args[4].length() < 4) for (int d = 4 - args[4].length(); d > 0; d--) args[4] = args[4] + " ";
            String sB = args[1] + args[2] + args[3] + args[4];
            //В цикле ищу id и заменяю соответствующую строку в String[] s2
            for (int c = 0; c < s2.length; c++) {
                char[] chars = s2[c].toCharArray();
                String idS = "";
                for (int q = 0; q < 11; q++) for (int d = 0; d < numbers.length; d++) if (chars[q] == numbers[d]) idS = idS + chars[q];
                int c2 = Integer.parseInt(idS);
                if (arg == c2) s2[c] = sB;
            }
        }
        if (args[0].equals("-d")){
            for (int c = 0; c < s2.length; c++) {
                char[] chars = s2[c].toCharArray();
                String idS = "";
                for (int q = 0; q < 11; q++) for (int d = 0; d < numbers.length; d++) if (chars[q] == numbers[d]) idS = idS + chars[q];
                int c2 = Integer.parseInt(idS);
                if (arg == c2) s2[c] = "-";
            }
        }
        //Всё записываю в файл
        String result = s2[0];
        for (int i = 1; i < s2.length; i++) {
            if (!s2[i].equals("-")) result = result + "\r\n" + s2[i];
        }
        byte[] end = result.getBytes();
        FileOutputStream os = new FileOutputStream(filename);
        os.write(end);
        os.close();
        //d:/File1.txt
        //d:/Test.txt
    }
}