Здравствуйте. Задача не является решённой по пунктам 3 и 4. Тестировал с обоими наборами параметров - в файле всё нормально обновляется и удаляется. Что валидатор тут считает неправильным? Может, есть какой-то набор параметров, который тут не проходит. Заранее спасибо.
public class Solution {
    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String fileName = reader.readLine();
        if (args.length > 0) {
            BufferedReader fileIn = new BufferedReader(new FileReader(fileName));
            //BufferedReader fileIn = new BufferedReader(new FileReader("F:\\JAVA\\Files\\IOEx\\file3.txt"));
            // Ищем максимальный id
            char[] idCh = new char[]{' ',' ',' ',' ',' ',' ',' ',' '};
            String s;
            int id = 0;
            while ((s = fileIn.readLine()) != null) {
                int j = 1;
//                System.out.println(j + ")" + s);
//                System.out.println(s.length());
//                for (int i = 0; i < s.length(); i++) {
//                  System.out.println("["+i+"] " + s.charAt(i));
//                }
//                System.out.println();

                char[] mas = new char[8];
                for (int i = 0; i < mas.length; i++) {
                    mas[i] = s.charAt(i);
                    //System.out.println("["+i+"] " + mas[i]);
                }
                String str = "";
                for (int i = 0; i < mas.length; i++) {
                    if (mas[i] != ' ')
                        str += mas[i];
                }
                //System.out.println("str = " + str);
                int idInt = Integer.parseInt(str);
                //System.out.println("idInt = " + idInt);
                if (idInt > id)
                    id = idInt;
                //System.out.println("id = " + id);
            }
            id = id + 1;                            // Конечный нужный id
            //System.out.println("idNew = " + id);
            String idS = Integer.toString(id);
            //System.out.println("idS = " + idS);
            for (int i = 0; i < idS.length(); i++) {
                idCh[i] = idS.charAt(i);
            }
//            for (int i = 0; i < idCh.length; i++) {
//                System.out.println("idCh["+i+"] " + idCh[i]);
//            }

            // Имя продукта и цена
            double priceD;
            String nameS = args[1];
            int countArgs = 2;

            while (true) {
                try {
                    double d = Double.parseDouble(args[countArgs]);
                    priceD = d;
                    countArgs++;
                    break;
                } catch (NumberFormatException e) {
                    nameS += " " + args[countArgs];
                    countArgs++;
                }
            }

            // Получили буфер с именем продукта
            char[] productName = new char[30];
            for (int i = 0; i < 30; i++) {
                productName[i] = ' ';
            }
            for (int i = 0; i < nameS.length(); i++) {
                productName[i] = nameS.charAt(i);
            }

            // Получили буфер с ценой
            char[] price = new char[]{' ',' ',' ',' ',' ',' ',' ',' '};
            String priceS = Double.toString(priceD);
            for (int i = 0; i < priceS.length(); i++) {
                price[i] = priceS.charAt(i);
            }

            // Получаем качество
            char[] quantity = new char[]{' ',' ',' ',' '};
            String quantytyS = args[countArgs];
            for (int i = 0; i < quantytyS.length(); i++) {
                quantity[i] = quantytyS.charAt(i);
            }

            // Получаем конечный буфер с данными
            char[] buffer = new char[50];
            for (int i = 0; i < 8; i++) {
                buffer[i] = idCh[i];
            }
            for (int i = 8, j = 0; j < 30; i++, j++) {
                buffer[i] = productName[j];
            }
            for (int i = 38, j = 0; j < 8; i++, j++) {
                buffer[i] = price[j];
            }
            for (int i = 46, j = 0; j < 4; i++, j++) {
                buffer[i] = quantity[j];
            }

            BufferedWriter fileOut = new BufferedWriter(new FileWriter(fileName,true));
            //BufferedWriter fileOut = new BufferedWriter(new FileWriter("F:\\JAVA\\Files\\IOEx\\file3.txt",true));

            fileOut.write('\r');
            fileOut.write('\n');
            fileOut.write(buffer);

            fileIn.close();
            fileOut.close();
        }
        reader.close();
    }
}