Доброго времени суток, друзья. Может быть замылился сам, может быть валидатор слишком строг. Давайте разбираться вместе.
Прайсы 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;
import java.io.*;
import java.util.*;
/*
Прайсы 2
*/
public class Solution {
public static List<String> lines;
public static void main(String[] args) throws Exception {
if (args.length != 0) {
lines = new ArrayList<>();
BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
String fileName = consoleReader.readLine();
consoleReader.close();
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
while (reader.ready())
lines.add(reader.readLine());
}
switch (args[0]) {
case "-u":
modifyLine(args);
break;
case "-d":
removeLine(args);
break;
}
try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {
for (String line : lines) {
writer.write(line);
writer.newLine();
}
}
lines.clear();
}
}
public static void modifyLine(String[] args) throws IllegalArgumentException {
for (int i = 0; i < lines.size(); i++) {
if (lines.get(i).startsWith(args[1])) {
String id = args[1];
String productName = args[2].length() > 30 ? args[2].substring(0, 30) : args[2];
String price = args[3].length() > 8 ? args[3].substring(0, 8) : args[3];
String quantity = args[4].length() > 4 ? args[4].substring(0, 4) : args[4];
String result = String.format("%-8s%-30s%-8s%-4s", id, productName, price, quantity);
lines.set(i, result);
return;
}
}
throw new IllegalArgumentException("id not found");
}
public static void removeLine(String[] args) throws IllegalArgumentException {
for (int i = 0; i < lines.size(); i++) {
if (lines.get(i).startsWith(args[1])) {
lines.remove(i);
return;
}
}
throw new IllegalArgumentException("id not found");
}
}