НЕПРИНЯТЫЕ РЕШЕНИЯ.

package com.javarush.test.level18.lesson10.bonus02;

/* Прайсы
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
*/


/*
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;

public class Solution
{
    public static void main(String[] args) throws Exception {
        if (args[0].equals("-c")) {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            String fileName = reader.readLine();
            boolean isFinishing = true;
            if (!(new File(fileName).exists())) isFinishing = false;
            String amount = prepareAmmount(args);
            String price = preparePrice(args);
            String productName = prepareProductName(args);
            String id = generateId(isFinishing, fileName);
            String productToWrite = id + productName + price + amount;
            File file = new File(fileName);
            FileWriter fr = new FileWriter(file, isFinishing);
            if (isFinishing) fr.write("\r\n");
            fr.write(productToWrite);    //без закрытия этого потока файл не запишется
            fr.close();
            reader.close();
        }
    }
    private static String generateId(boolean isFinishing, String fileName) throws IOException {
        String id;
        if (isFinishing) {
            String line;
            BufferedReader idReader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), StandardCharsets.UTF_8));
            ArrayList<String> list = new ArrayList<>();
            while ((line = idReader.readLine()) != null) {
                list.add(line);
            }
            int[] listOfId = new int[list.size()];    //здесь будет список ID
            int x = 0;
            for (String s : list) {
                char[] ch = s.toCharArray();    //здесь будет ID по символам
                StringBuilder builder = new StringBuilder();
                for (int i = 0; i < 8; i++) {
                    builder.append(Character.toString(ch[i]));
                }
                listOfId[x++] = Integer.parseInt(builder.toString().trim());
            }
            int maxId = 0;
            for (int aListOfId1 : listOfId) {
                if (maxId < aListOfId1) maxId = aListOfId1;
            }
            id = String.valueOf(maxId + 1);
            //
            //if (maxId >= 99999899) maxId = 1;
            //while (true) {
            //boolean isEqual = false;
            //id = String.valueOf((int) ((Math.random() * 100) + maxId));
            //for (int aListOfId : listOfId) {
            //if (Integer.parseInt(id) == aListOfId) isEqual = true;
            //}
            //if (!isEqual) break;
            //}
            //idReader.close();
            //
        }
        else id = String.valueOf(1);
        if (id.length() < 8) {
            StringBuilder builder = new StringBuilder();
            builder.append(id);
            for (int i = id.length(); i < 8; i++) {
                builder.append(" ");
            }
            id = builder.toString();
        }
        return id.substring(0, 8);
    }

    private static String prepareProductName(String[] args) {
        StringBuilder builder = new StringBuilder();
        for (int i = 1; i < args.length - 2; i++) {
            builder.append(args[i]);
        }
        String productName = builder.toString().trim();
        if (productName.length() < 30) {
            StringBuilder st = new StringBuilder();
            st.append(productName);
            for (int i = productName.length(); i < 30; i++) {
                st.append(" ");
            }
            productName = st.toString();
        }
        else if (productName.length() > 30) {
            StringBuilder st = new StringBuilder();
            char[] ch = productName.toCharArray();
            for (int i = 0; i < 30; i++) {
                st.append(Character.toString(ch[i]));
            }
            productName = st.toString();
        }
        return productName.substring(0, 30);
    }

    private static String prepareAmmount(String[] args) {
        String amount = args[args.length - 1];
        if (amount.length() < 4) {
            StringBuilder st = new StringBuilder();
            st.append(amount);
            for (int i = amount.length(); i < 4; i++) {
                st.append(" ");
            }
            amount = st.toString();
        }
        else if (amount.length() > 4) {
            StringBuilder st = new StringBuilder();
            char[] ch = amount.toCharArray();
            for (int i = amount.length() - 4; i < amount.length(); i++) {
                st.append(Character.toString(ch[i]));
            }
            amount = st.toString();
        }
        return amount.substring(0, 4);
    }

    private static String preparePrice(String[] args) {
        String price = args[args.length - 2];
        if (price.length() < 8) {
            StringBuilder st = new StringBuilder();
            st.append(price);
            for (int i = price.length(); i < 8; i++) {
                st.append(" ");
            }
            price = st.toString();
        }
        else if (price.length() > 8) {
            StringBuilder st = new StringBuilder();
            char[] ch = price.toCharArray();
            for (int i = 0; i < 8; i++) {
                st.append(Character.toString(ch[i]));
            }
            price = st.toString();
        }
        return price.substring(0, 8);
    }
}
*/

import java.io.*;
import java.util.Locale;
import java.util.Scanner;

public class Solution {
    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String fname = reader.readLine();
        if (args.length > 0)
            if (args[0].equals("-c"))
                add(args, fname);
        reader.close();
    }
    public static int getLastId(String fname) throws FileNotFoundException {
        Scanner file = new Scanner(new File(fname));
        int maxId = Integer.MIN_VALUE;
        while (file.hasNextLine())
        {
            String line = file.nextLine();
            int id = Integer.parseInt(line.substring(0, 8).trim());
            if (id > maxId)
                maxId = id;
        }
        file.close();
        return maxId;
    }
    public static void add(String[] args, String fname) throws IOException {
        if (args.length < 4)
            return;
        FileWriter file = new FileWriter(fname, true);
        String id = String.format("%-8.8s", getLastId(fname) + 1);
        String productName = String.format("%-30.30s", getProductNameInArgs(args));
        String price = String.format("%-8.8s", String.format(Locale.US, "%.2f", Double.parseDouble(args[args.length-2])));
        String quantity = String.format("%-4.4s", args[args.length-1]);
        file.write(System.getProperty( "line.separator" ));
        file.write(id + productName + price + quantity);
        file.close();
    }
    public static String getProductNameInArgs(String[] args) {
        StringBuilder productName = new StringBuilder();
        for (int i = 1; i < args.length - 2; i++) {
            productName.append(args[i]+" ");
        }
        return productName.toString();
    }
}
package com.javarush.test.level18.lesson10.bonus02;

/* Прайсы
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
*/


/*
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;

public class Solution
{
    public static void main(String[] args) throws Exception {
        if (args[0].equals("-c")) {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            String fileName = reader.readLine();
            boolean isFinishing = true;
            if (!(new File(fileName).exists())) isFinishing = false;
            String amount = prepareAmmount(args);
            String price = preparePrice(args);
            String productName = prepareProductName(args);
            String id = generateId(isFinishing, fileName);
            String productToWrite = id + productName + price + amount;
            File file = new File(fileName);
            FileWriter fr = new FileWriter(file, isFinishing);
            if (isFinishing) fr.write("\r\n");
            fr.write(productToWrite);    //без закрытия этого потока файл не запишется
            fr.close();
            reader.close();
        }
    }
    private static String generateId(boolean isFinishing, String fileName) throws IOException {
        String id;
        if (isFinishing) {
            String line;
            BufferedReader idReader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), StandardCharsets.UTF_8));
            ArrayList<String> list = new ArrayList<>();
            while ((line = idReader.readLine()) != null) {
                list.add(line);
            }
            int[] listOfId = new int[list.size()];    //здесь будет список ID
            int x = 0;
            for (String s : list) {
                char[] ch = s.toCharArray();    //здесь будет ID по символам
                StringBuilder builder = new StringBuilder();
                for (int i = 0; i < 8; i++) {
                    builder.append(Character.toString(ch[i]));
                }
                listOfId[x++] = Integer.parseInt(builder.toString().trim());
            }
            int maxId = 0;
            for (int aListOfId1 : listOfId) {
                if (maxId < aListOfId1) maxId = aListOfId1;
            }
            id = String.valueOf(maxId + 1);
            //
            //if (maxId >= 99999899) maxId = 1;
            //while (true) {
            //boolean isEqual = false;
            //id = String.valueOf((int) ((Math.random() * 100) + maxId));
            //for (int aListOfId : listOfId) {
            //if (Integer.parseInt(id) == aListOfId) isEqual = true;
            //}
            //if (!isEqual) break;
            //}
            //idReader.close();
            //
        }
        else id = String.valueOf(1);
        if (id.length() < 8) {
            StringBuilder builder = new StringBuilder();
            builder.append(id);
            for (int i = id.length(); i < 8; i++) {
                builder.append(" ");
            }
            id = builder.toString();
        }
        return id.substring(0, 8);
    }

    private static String prepareProductName(String[] args) {
        StringBuilder builder = new StringBuilder();
        for (int i = 1; i < args.length - 2; i++) {
            builder.append(args[i]);
        }
        String productName = builder.toString().trim();
        if (productName.length() < 30) {
            StringBuilder st = new StringBuilder();
            st.append(productName);
            for (int i = productName.length(); i < 30; i++) {
                st.append(" ");
            }
            productName = st.toString();
        }
        else if (productName.length() > 30) {
            StringBuilder st = new StringBuilder();
            char[] ch = productName.toCharArray();
            for (int i = 0; i < 30; i++) {
                st.append(Character.toString(ch[i]));
            }
            productName = st.toString();
        }
        return productName.substring(0, 30);
    }

    private static String prepareAmmount(String[] args) {
        String amount = args[args.length - 1];
        if (amount.length() < 4) {
            StringBuilder st = new StringBuilder();
            st.append(amount);
            for (int i = amount.length(); i < 4; i++) {
                st.append(" ");
            }
            amount = st.toString();
        }
        else if (amount.length() > 4) {
            StringBuilder st = new StringBuilder();
            char[] ch = amount.toCharArray();
            for (int i = amount.length() - 4; i < amount.length(); i++) {
                st.append(Character.toString(ch[i]));
            }
            amount = st.toString();
        }
        return amount.substring(0, 4);
    }

    private static String preparePrice(String[] args) {
        String price = args[args.length - 2];
        if (price.length() < 8) {
            StringBuilder st = new StringBuilder();
            st.append(price);
            for (int i = price.length(); i < 8; i++) {
                st.append(" ");
            }
            price = st.toString();
        }
        else if (price.length() > 8) {
            StringBuilder st = new StringBuilder();
            char[] ch = price.toCharArray();
            for (int i = 0; i < 8; i++) {
                st.append(Character.toString(ch[i]));
            }
            price = st.toString();
        }
        return price.substring(0, 8);
    }
}
*/

        import java.io.*;
        import java.util.Locale;
        import java.util.Scanner;

public class Solution {
    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String fname = reader.readLine();
        if (args.length > 0)
            if (args[0].equals("-c"))
                add(args, fname);
        reader.close();
    }
    public static int getLastId(String fname) throws FileNotFoundException {
        Scanner file = new Scanner(new File(fname));
        int maxId = Integer.MIN_VALUE;
        while (file.hasNextLine())
        {
            String line = file.nextLine();
            int id = Integer.parseInt(line.substring(0, 8).trim());
            if (id > maxId)
                maxId = id;
        }
        file.close();
        return maxId;
    }
    public static void add(String[] args, String fname) throws IOException {
        if (args.length < 4)
            return;
        FileWriter file = new FileWriter(fname, true);
        String id = String.format("%-8.8s", getLastId(fname) + 1);
        String productName = String.format("%-30.30s", getProductNameInArgs(args));
        String price = String.format("%-8.8s", String.format(Locale.US, "%.2f", Double.parseDouble(args[args.length-2])));
        String quantity = String.format("%-4.4s", args[args.length-1]);
        file.write(System.getProperty( "line.separator" ));
        file.write(id + productName + price + quantity);
        file.close();
    }
    public static String getProductNameInArgs(String[] args) {
        StringBuilder productName = new StringBuilder();
        for (int i = 1; i < args.length - 2; i++) {
            productName.append(args[i]+" ");
        }
        return productName.toString();
    }
}