Всем привет.
Думал думал в чем проблема, так и не придумал.
package com.javarush.task.task18.task1828;
/*
Прайсы 2
CrUD для таблицы внутри файла
Считать с консоли имя файла для операций CrUD
Программа запускается с одним из следующих наборов параметров:
-u id productName price quantity
-d id
Значения параметров:
где id - 8 символов
productName - название товара, 30 символов
price - цена, 8 символов
quantity - количество, 4 символа
-u - обновляет данные товара с заданным id
-d - производит физическое удаление товара с заданным id (все данные, которые относятся к переданному id)
В файле данные хранятся в следующей последовательности (без разделяющих пробелов):
id productName price quantity
Данные дополнены пробелами до их длины
Пример:
19847 Шорты пляжные синие 159.00 12
198479 Шорты пляжные черные с рисунко173.00 17
19847983Куртка для сноубордистов, разм10173.991234
Требования:
1. Программа должна считать имя файла для операций CrUD с консоли.
2. При запуске программы без параметров список товаров должен остаться неизменным.
3. При запуске программы с параметрами "-u id productName price quantity" должна обновится информация о товаре в файле.
4. При запуске программы с параметрами "-d id" строка товара с заданным id должна быть удалена из файла.
5. Созданные для файлов потоки должны быть закрыты.
*/
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class Solution {
public static void main(String[] args) throws Exception {
if (args.length > 0 && args[0].equals("-u")) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
reader.close();
String id = args[1];
updateId(fileName, id, args);
} else if (args.length>0&&args[0].equals("-d")) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
reader.close();
String id = args[1];
deleteId(fileName, id);
}
}
public static void updateId(String fileName, String id, String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName));
List<String> list = new ArrayList<>();
while (bufferedReader.ready()) {
String line = bufferedReader.readLine();
list.add(line);
}
bufferedReader.close();
for (int i = 0; i < list.size(); i++) {
String text = list.get(i).substring(0, 8).trim();
if (id.equals(text)) {
String newText = getProduct(args);
list.set(i, newText);
}
}
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileName));
for (int i=0;i<list.size();i++) {
bufferedWriter.write(list.get(i));
bufferedWriter.flush();
if(i==list.size()-1) {
break;
}
bufferedWriter.newLine();
}
bufferedWriter.close();
}
public static void deleteId(String fileName, String id) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName));
List<String> list = new ArrayList<>();
while (bufferedReader.ready()) {
String line = bufferedReader.readLine();
list.add(line);
}
bufferedReader.close();
for (int i = 0; i < list.size(); i++) {
String text = list.get(i).substring(0, 7).trim();
if (id.equals(text)) {
list.remove(i);
}
}
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileName));
for (String text : list) {
bufferedWriter.write(text + "\n");
}
bufferedWriter.flush();
bufferedWriter.close();
}
public static String getProduct(String[] args) {
//-u id productName price quantity
String productResult = "";
String id = String.format("%-8.8s", args[1]);
String product = String.format("%-30.30s", args[2]);
double price = Double.parseDouble(args[3]);
String priceString = String.valueOf(String.format("%-8.8s", price));
//String quantity = String.format("%-4.4s", args[4]);
String quantity = String.format("%.4s", args[4]);
productResult = id + product + priceString + quantity;
return productResult;
}
}