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.*;

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

        if (!args[0].equals("-c"))
            return;

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

        String index = getNextIndexFromFile(fileName);
        if (index.equals("")) {
            System.out.println("Файл пустой");
            return;
        }

        StringBuilder productName = new StringBuilder();
        for (int i = 1; i < args.length-2; i++)
            productName.append(args[i]).append(" ");

        addNewProductInFile(fileName, index, productName.toString(), args[args.length-2], args[args.length-1]);
    }

    public static String getNextIndexFromFile(String fileName) throws IOException{

        FileInputStream fileIn = new FileInputStream(fileName);
        byte[] buffer = new byte[fileIn.available()];
        if (fileIn.available()>0)
            fileIn.read(buffer);
        else return "";

        fileIn.close();

        String[] listProd = new String(buffer).split("\n");
        long max = 0;
        for (String line : listProd){
            long index = Long.parseLong(line.substring(0, 8).trim());
            if (index > max)
                max = index;
        }
        max++;
        return Long.valueOf(max).toString();
    }

    public static void addNewProductInFile(String fileName, String index, String productName, String price, String quantity) throws IOException{

        FileOutputStream fileOut = new FileOutputStream(fileName, true);
        fileOut.write(System.lineSeparator().getBytes());
        fileOut.write(addSpacesToLine(index, 8).getBytes());
        fileOut.write(addSpacesToLine(productName, 30).getBytes());
        fileOut.write(addSpacesToLine(price, 8).getBytes());
        fileOut.write(addSpacesToLine(quantity, 4).trim().getBytes());

        fileOut.close();
    }

    public static String addSpacesToLine(String line, int len){
        while(line.length() < len)
            line = line.concat(" ");
        return line.substring(0, len);
    }
}

не могу понять, что не так. Помогите, пожалуйста

задан 02 Ноя '16, 15:14

Anabirelle's gravatar image

Anabirelle
2116
одобрено: 37%

закрыто 13 Сен, 15:54

AndyRad's gravatar image

AndyRad
13.1k29

Вопрос был закрыт по следующей причине: "Problem is not reproducible or outdated" AndyRad 13 Сен, 15:54


Вроде как все правильно, попробуйте убрать проверки и писать в файл в методе main.

ссылка

опубликован 03 Ноя '16, 05:09

Yuri_Dnepr's gravatar image

Yuri_Dnepr
5.8k7
одобрено: 51%

закройте вопрос

(03 Ноя '16, 11:55) Yuri_Dnepr

Оказалось, что не нужно было добавлять в файл символ переноса строки. Убрав fileOut.write(System.lineSeparator().getBytes()); задача была принята

(03 Ноя '16, 11:43) Anabirelle

Следить за вопросом

По Email:

После авторизации вы сможете подписаться на любые обновления здесь

Основы Markdown

  • *italic* or _italic_
  • **bold** or __bold__
  • ссылка:[текст](http://url.com/ "заголовок")
  • изображение?![alt текст](/path/img.jpg "заголовок")
  • нумерованный список: 1. Foo 2. Bar
  • Для того чтобы добавить разрыв строки просто добавьте два пробела.
  • основные HTML тэги, также поддерживаются

Тэги:

×3,805
×438
×81
×34

Задан: 02 Ноя '16, 15:14

Просмотров: 216 раз

Отредактирован: 13 Сен, 15:54