task.task18.task1828 совет по решению

Коллеги, посмотрите код, уже сам не могу вменяемо оценить, где ошибаюсь?
Решал через LinkedHashMap. Идея простая. Выделил ID из строки, и занес в мапу
(ID, полный String);
После по ключу ищу что сделать,
если удалять, то по ID,
если заменить, то клею строку из данных, потом в мапу заношу.
После все заливаю write. Но явно где то что то не так по реализации.

Прайсы 2
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. Созданные для файлов потоки должны быть закрыты.

package com.javarush.task.task18.task1828;

/*
Прайсы 2
*/

import java.io.*;
import java.util.*;

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

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String fileName = reader.readLine();
        reader.close();
        Map<Integer, String> map = new LinkedHashMap<>();
        BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "Cp1251"));
        while (in.ready()) {
            String str1 = in.readLine();
            int id1 = Integer.parseInt(str1.substring(0, 8).replaceAll("\\D", ""));
            map.put(id1, str1);
        }
        if (args[0].equals("-u")) {
            String productname = args[2];
            for (int l = 3; l < args.length - 2; l++) productname += " " + args[l];
            String str3 = String.format("%-8.8s%-30.30s%-8.8s%-4.4s%n", String.valueOf(args[1]), productname, args[args.length - 2], args[args.length - 1]);
            map.put(Integer.parseInt(args[1]), str3);
        }
        if (args[0].equals("-d")) {
            map.remove(Integer.parseInt(args[1]));
        }

        in.close();
        BufferedWriter fileWR = new BufferedWriter(new FileWriter(fileName));
        for(Map.Entry<Integer, String> entry: map.entrySet()){
            String str4 = entry.getValue();
            fileWR.write(str4);
        }
        fileWR.close();
    }

3 комментария

3des
  • 3des
  • 0
BufferedReader in = new BufferedReader(new FileReader(reader.readLine());
codename
Пробовал разные варианты и этот тоже, не проходит пока. Спасибо за помощь.
GreySci
Долго сам мучался с этой задачей. Вообщем, если валидатор не принимает п. 3, то уберите указание кодовой страницы.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.