task.task18.task1827

Коллеги! Объясните мне тупому почему не принимает валидатор мое решение. Кто решил — скиньте пожалуйста свое решение на vik.piter@gmail.com
Программа все делает правильно… но не принимает!
Уже не могу сидеть на этом задании…

Прайсы


CrUD для таблицы внутри файла.
Считать с консоли имя файла для операций CrUD.

Программа запускается со следующим набором параметров:
-c productName price quantity

Значения параметров:
где id — 8 символов.
productName — название товара, 30 chars (60 bytes).
price — цена, 8 символов.
quantity — количество, 4 символа.

-c — добавляет товар с заданными параметрами в конец файла, генерирует id самостоятельно, инкрементируя максимальный id, найденный в файле.

В файле данные хранятся в следующей последовательности (без разделяющих пробелов):
id productName price quantity

Данные дополнены пробелами до их длины.

Пример:
19846 Шорты пляжные синие 159.00 12
198478 Шорты пляжные черные с рисунко173.00 17
19847983 Куртка для сноубордистов, разм10173.991234

Требования:
1. Программа должна считать имя файла для операций CrUD с консоли.
2. При запуске программы без параметров список товаров должен остаться неизменным.
3. При запуске программы с параметрами "-c productName price quantity" в конец файла должна добавится новая строка с товаром.
4. Товар должен иметь следующий id, после максимального, найденного в файле.
5. Форматирование новой строки товара должно четко совпадать с указанным в задании.
6. Созданные для файлов потоки должны быть закрыты.

package com.javarush.task.task18.task1827;

/* 
Прайсы
*/

import java.io.*;
import java.nio.Buffer;
import java.util.ArrayList;

public class Solution {
    public static void main(String[] args) throws Exception {

        if (args[0].equals("-c") && args.length == 4) {


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

            // получаем параметры для прибавления

            String productName = args[1];
            if (productName.length() > 30) {
                productName = args[1].substring(0, 29);
            } else {
                while ((30 - productName.length()) != 0) {
                    productName += " ";
                }
            }

            String price = args[2];
            if (price.length() > 8) {
                price = args[2].substring(0, 7);
            } else {
                while ((8 - price.length()) != 0) {
                    price += " ";
                }
            }

            String quantity = args[3];
            if (quantity.length() > 4) {
                quantity = args[3].substring(0, 3);
            } else {
                while ((4 - quantity.length()) != 0) {
                    quantity += " ";
                }
            }

            // нашли id который надо прибавить
            FileReader fileReader = new FileReader(fileName);
            StringBuilder sb = new StringBuilder();
            while (fileReader.ready()) {
                sb.append((char) fileReader.read());
            }
            fileReader.close();

            String sub2parse = sb.toString().substring(sb.toString().length() - 50, sb.toString().length() - 42);

            StringBuilder sb2 = new StringBuilder();

            Integer t;
            for (char c : sub2parse.toCharArray()) {
                t = Integer.parseInt(String.valueOf©);
                if (t instanceof Integer) {


                }

                if (c != ' ') {
                    sb2.append©;
                }
            }


            double id = Double.parseDouble(sb2.toString());


            if (id < 99999999) {
                id++;
            }

            // добавили к id нужные пробелы
            String idString = Double.toString(id);
            if (idString.length() < 8) {
                while ((8 - idString.length()) != 0) {
                    idString += " ";
                }
            }

            // генерим нашу выстраданную строчку
            String string = idString + productName + price + quantity;

            // считываем все в массив
            BufferedReader br = new BufferedReader(new FileReader(fileName));
            ArrayList<String> ss = new ArrayList<String>();
            while (br.ready()) {
                ss.add(br.readLine());
            }
            br.close();

            BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
            for (String str : ss) {
                bw.write(str);
            }
            bw.write(string);
            bw.close();


        }
    }
}

task1827; Помогите все перепробовал !!!!!


package com.javarush.task.task18.task1827;
/* 
Прайсы
*/
import java.io.*;
import java.util.ArrayList;

public class Solution {
    public static void main(String[] args) throws Exception
    {
        ArrayList <String> list = new ArrayList<>();
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String name = in.readLine();
        in.close();
        BufferedReader FileReader = new BufferedReader(new FileReader(name));
        while (FileReader.ready()){
            list.add(FileReader.readLine());
        }
        FileReader.close();

        if(args[0].equals("-c"))
        {
            Integer id = FileRead(name);
            String productName = args[1].trim();
            String price = args[2].trim();
            String quantity = args[3].trim();
            FileWrite(name, list, String.valueOf(id), productName, price, quantity);
        }
    }
    private static Integer  FileRead(String name) throws IOException
    {
        BufferedReader bufFileReader = new BufferedReader(new FileReader(name));
        int nextID;
        int max = 0;


        while (bufFileReader.ready()){

            nextID = Integer.parseInt(bufFileReader.readLine().substring(0, 8).trim());
            if (nextID > max){
                max = nextID;
            }
        }

        max = max + 1;
        bufFileReader.close();
        return max;
    }
    private static void FileWrite(String name, ArrayList<String> list, String id, String productName, String price, String quantity) throws IOException
    {
        File f1 = new File (name);
        f1.delete();
        f1.createNewFile();
        list.add(String.format("%-8s%-30.30s%-8.8s%-4.4s", id, productName, price, quantity));
        RandomAccessFile file = new RandomAccessFile(name, "rw");
        file.skipBytes((int)file.length());
        for (String aList : list) {
            file.writeBytes(aList+"\n");
        }
        file.close();
    }
}

  • ,

com.javarush.task.task18.task1827 не проходит валидацию

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

package com.javarush.task.task18.task1827;

/* 
Прайсы
*/

import java.io.*;

public class Solution {
    public static void main(String[] args) {

        try {
            String idStr = "", productName, price, quantity;
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            String name = reader.readLine();
            reader.close();

            if (args.length > 0) {
                if (args[0].equals("-c")) {
                    productName = args[1];
                    price = args[2];
                    quantity = args[3];

                    productName = addSpaces(productName, 30);
                    price = addSpaces(price, 8);
                    quantity = addSpaces(quantity, 4);
                    idStr = getNewId(name);
                    idStr = addSpaces(idStr, 8);

                    FileOutputStream out = new FileOutputStream(name, true);
                    String forOut = "\n" + idStr + productName + price + quantity;
                    out.write(forOut.getBytes());
                    out.close();
                }
            }
        } catch (Exception ex){
            ex.printStackTrace();
        }
    }

    public static String addSpaces(String field, int size) {
        String newField = field;

        if (field.length() < size) {
            for (int i = 0; i < size - field.length(); i++) {
                newField = newField + " ";
            }
        } else if (field.length() > size) {
            newField = field.substring(0, size);
        }
        return newField;
    }

    public static String getNewId(String filename) {
        String newId = "0";

        try {
            BufferedReader in = new BufferedReader(new FileReader(filename));
            while (in.ready()) {
                String id = in.readLine().substring(0, 8);
                if (Integer.parseInt(id.trim()) > Integer.parseInt(newId.trim())) {
                    newId = id;
                }
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        newId = Integer.toString(Integer.parseInt(newId.trim())+1);
        return newId;
    }
}


Подскажите, плиз, что тут не так? Валидацию вообще не проходит, но все прекрасно работает