Не совсем понятно, зачем в правильном решении вызывают метод .substring(0, 8).trim(). Ведь substring и так возвращает обрезанный string. Сделал без .trim и все работает корректно.
Прайсы 2
CRUD для таблицы внутри файла.
Напиши программу, которая считывает с консоли путь к файлу для операций CRUD и при запуске в зависимости от флага, переданного в параметрах обновляет данные товара с заданным id или производит физическое удаление товара с заданным id (удаляет из файла все данные, которые относятся к переданному id).
-u id productName price quantity
-d id
Значения параметров:
-u - флаг, который означает обновление данных товара с заданным id
-d - флаг, который означает физическое удаление товара с заданным id (из файла удаляются все данные, которые относятся к переданному id)
id - id товара, 8 символов
productName - название товара, 30 символов
price - цена, 8 символов
quantity - количество, 4 символа
В файле данные хранятся в следующей последовательности (без разделяющих пробелов):
id productName price quantity
Данные дополнены пробелами до их длины.
Для чтения и записи файла нужно использовать FileReader и FileWriter соответственно.
Пример содержимого файла:
19847 Шорты пляжные синие 159.00 12
198479 Шорты пляжные черные с рисунко173.00 17
19847983Куртка для сноубордистов, разм10173.991234
Requirements:
1. Программа должна считать имя файла для операций CRUD с консоли.
2. При запуске программы без параметров список товаров должен остаться неизменным.
3. При запуске программы с параметрами "-u id productName price quantity" должна обновится информация о товаре в файле.
4. При запуске программы с параметрами "-d id" строка товара с заданным id должна быть удалена из файла.
5. Созданные для файлов потоки должны быть закрыты.
public class Solution {
public static class Product {
private int id;
private String productName;
private String price;
private String quantity;
public Product(int id, String productName, String price, String quantity) {
this.id = id;
this.productName = productName;
this.price = price;
this.quantity = quantity;
}
@Override
public String toString() {
return String.format("%-8d%-30s%-8s%-4s", id, productName, price, quantity);
}
}
public static Product getProduct(String string) {
String uncuttedId = string.substring(0, 8);
StringBuilder id = new StringBuilder();
for (int n = 0; n < uncuttedId.length(); n++) {
if (Character.isDigit(uncuttedId.charAt(n))) {
id.append(uncuttedId.charAt(n));
}
}
String productName = string.substring(8, 38);
String price = string.substring(38, 46);
String quantity = string.substring(46, 50);
return new Product(Integer.parseInt(id.toString()), productName, price, quantity);
}
public static void main(String[] args) throws IOException {
if (args.length > 0) {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String filename = bufferedReader.readLine();
ArrayList<Product> products = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
while (reader.ready()) {
String productAsLine = reader.readLine();
products.add(getProduct(productAsLine));
}
}
switch (args[0]) {
case "-u":
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename, true));
BufferedWriter cleaner = new BufferedWriter(new FileWriter(filename))) {
int newId = Integer.parseInt(args[1]);
StringBuilder stringbuilder = new StringBuilder();
for (int n = 2; n < args.length - 2; n++) {
stringbuilder.append(args[n]).append(" ");
}
String newProductName = String.format("%-30.30s", stringbuilder.toString());
String newPrice = String.format("%-8.8s", args[args.length - 2]);
String newQuantity = String.format("%-4.4s", args[args.length - 1]);
cleaner.write("");
for (Product product : products) {
if (product.id == newId) {
product.productName = newProductName;
product.price = newPrice;
product.quantity = newQuantity;
}
writer.append(product.toString());
writer.newLine();
}
break;
}
case "-d":
int deteleId = Integer.parseInt(args[1]);
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) {
int indexToDelete = 0;
for (Product product : products) {
if (product.id == deteleId) {
indexToDelete = products.indexOf(product);
}
}
products.remove(indexToDelete);
for (Product product : products) {
writer.append(product.toString());
writer.newLine();
}
}
break;
}
}
}
}