Всем привет.
Список товаров должен остаться неизменным.
Проверял в файле, ни чего не меняется, да и сама программа ошибку ArrayIndexOutOfBoundsException выбрасывает, при запуске, т.к в args нету ничего.
package com.javarush.task.task18.task1827;
/*
Прайсы
CrUD для таблицы внутри файла.
Считать с консоли имя файла для операций CrUD.
Программа запускается со следующим набором параметров:
-c productName price quantity
Значения параметров:
где id - 8 символов.
productName - название товара, 30 символов.
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. В классе Solution не должны быть использованы статические переменные.
3. При запуске программы без параметров список товаров должен остаться неизменным.
4. При запуске программы с параметрами "-c productName price quantity" в конец файла должна добавится новая строка с товаром.
5. Товар должен иметь следующий id, после максимального, найденного в файле.
6. Форматирование новой строки товара должно четко совпадать с указанным в задании.
7. Созданные для файлов потоки должны быть закрыты.
*/
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
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();
reader.close();
int maxId = findMaxId(fileName);
String result = "";
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileName, true));
result = getProduct(args, maxId);
bufferedWriter.write(result);
bufferedWriter.flush();
bufferedWriter.close();
}else{
}
}
public static Integer findMaxId(String fileName) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName));
ArrayList<String> strList = new ArrayList<>();
String str;
while (bufferedReader.ready()) {
str = bufferedReader.readLine().substring(0,8).trim();
strList.add(str);
}
bufferedReader.close();
ArrayList<Integer> intList = new ArrayList<>();
for (String list : strList) {
String[] arrStrList = list.split(" ");
int id = Integer.parseInt(arrStrList[0]);
intList.add(id);
}
int maxId = Collections.max(intList);
maxId++;
return maxId;
}
public static String getProduct(String[] args, int maxId) {
String productResult = "";
String id = String.format("%-8.8s", maxId);
String product = String.format("%-30.30s", args[1]);
double price = Double.parseDouble(args[2]);
String priceString = String.valueOf(String.format("%-8.8s", price));
String quantity = String.format("%-4.4s", args[3]);
productResult = "\n" + id + product + priceString + quantity;
return productResult;
}
}