Мой вариант, не принимает валидатор.
package com.javarush.test.level18.lesson10.bonus03;
/* Прайсы 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
*/
import java.io.*;
import java.util.Locale;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
String fileName = scanner.nextLine();
if (args.length > 0) process(args, fileName);
scanner.close();
}
private static void process(String[] args, String fileName) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(new File(fileName)));
PrintWriter writer = new PrintWriter(new FileWriter(fileName + "_temp.txt"));
String line;
boolean firstLine = true;
while ((line = reader.readLine()) != null) {
StringTokenizer stringTokenizer = new StringTokenizer(line, " ");
String id = stringTokenizer.nextToken();
if (!id.equals(args[1])) {
if (!firstLine) writer.println();
else firstLine = false;
writer.print(line);
}
else {
if (args[0].equals("-u")) {
line = update(args);
if (!firstLine) writer.println();
else firstLine = false;
writer.print(line);
}
}
}
File file = new File(fileName); //переименование файла — начало кода
File tempFile = new File(fileName + "_temp.txt");
tempFile.renameTo(file); //переименование файла - конец кода
reader.close();
writer.close();
}
private static String update(String[] args) {
String id = String.format("%1$-8.8s", args[1]);
String productName = String.format("%1$-30.30s", createProductName(args));
String price = String.format("%-8.8s", String.format(Locale.US, "%.2f", Double.parseDouble(args[args.length - 2])));
String quantity = String.format("%-4.4s", Integer.parseInt(args[args.length - 1]));
String line = id + productName + price + quantity;
return line;
}
private static String createProductName(String[] args) {
StringBuilder builder = new StringBuilder();
for (int i = 2; i < args.length - 2; i++) {
builder.append(args[i]);
builder.append(" ");
}
return builder.toString();
}
}
Списал:
package com.javarush.test.level18.lesson10.bonus03;
/* Прайсы 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
*/
import java.io.*;
import java.util.ArrayList;
import java.util.Locale;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
String fileName = rd.readLine();
rd.close();
if ("-u".equals(args[0])){
update(fileName,args[1],args[2],args[3],args[4]);
} else if ("-d".equals(args[0])){
delete(fileName,args[1]);
}
}
public static void update(String fileName, String id, String productName, String price, String quantity){
try {
BufferedReader rd = new BufferedReader(new FileReader(fileName));
ArrayList<String> list = new ArrayList<>();
while (rd.ready()){
list.add(rd.readLine());
}
rd.close();
if (id.contains(" "))
id = id.substring(0,id.indexOf(" "));
for (int i = 0; i < list.size(); i++) {
String outId = list.get(i).substring(0,8);
if (outId.contains(" "))
outId = outId.substring(0,outId.indexOf(" "));
if (outId.equals(id)){
if (productName.length()>30)
productName = productName.substring(0,30);
if (price.length()>8)
price = price.substring(0,8);
if (quantity.length()>4)
quantity = quantity.substring(0,4);
while (outId.length()<8){
outId+=" ";
}
while (productName.length()<30){
productName+=" ";
}
while (price.length()<8){
price+=" ";
}
while (quantity.length()<4){
quantity+=" ";
}
list.set(i,outId+productName+price+quantity);
break;
}
}
FileOutputStream stream = new FileOutputStream(fileName);
for (int i = 0; i < list.size(); i++) {
if (i<list.size()-1){
stream.write((list.get(i)).getBytes());
stream.write('\n');
}
else {
stream.write(list.get(i).getBytes());
}
}
stream.flush();
stream.close();
} catch (FileNotFoundException e){
} catch (IOException e){}
}
public static void delete(String fileName, String id){
try {
BufferedReader rd = new BufferedReader(new FileReader(fileName));
ArrayList<String> list = new ArrayList<>();
while (rd.ready()){
list.add(rd.readLine());
}
rd.close();
if (id.contains(" "))
id = id.substring(0,id.indexOf(" "));
for (int i = 0; i < list.size(); i++) {
String outId = list.get(i).substring(0,8);
if (outId.contains(" "))
outId = outId.substring(0,outId.indexOf(" "));
if (outId.equals(id)){
list.remove(i);
break;
}
}
FileOutputStream stream = new FileOutputStream(fileName);
for (int i = 0; i < list.size(); i++) {
if (i<list.size()-1){
stream.write((list.get(i)).getBytes());
stream.write('\n');
}
else {
stream.write(list.get(i).getBytes());
}
}
stream.flush();
stream.close();
} catch (FileNotFoundException e){
} catch (IOException e){}
}
}
Слава тебе о добрый человек.
Спасибо что ты создал такой сайт.
Жаль что есть пробелы в задачах, планируется добавить задачи?
Да, задачи будут добавляться.