Я победил валидатор в перезаписи файла, но он всё равно ругается, что:
"Товар с измененными данными должен находится на той же строке в файле."
В тестовом файле всё заменяется, но не пойму почему выскакивает ошибка. подскажите пожалуйста
package com.javarush.task.task18.task1828;
import java.io.*;
import java.util.*;
/*
Прайсы 2
*/
public class Solution {
public static void main(String[] args) throws IOException {
Map<Integer, String> mapProduct;
String fileName;
// args = new String[]{"-u", "19847", "Куртка для лыжников размер569", "24443.9", "2214"};
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
fileName = reader.readLine();
//fileName = "D://Java//Example.txt";
reader.close();
mapProduct = readFile(fileName);
if (args.length!=0){
switch (args[0]){
case "":{
break;
}
case "-u": {
int idProduct = Integer.parseInt(args[1].trim());
String productName = args[2];
String price =args[3];
String quantity = args[4];
updateString(mapProduct, idProduct, productName, price, quantity, fileName);
break;
}
case "-d":{
int idProduct = Integer.parseInt(args[1].trim());
deleteString(mapProduct, idProduct, fileName);
break;
}
default:
System.out.println("Unknown argument");
}
}
}
private static void deleteString(Map<Integer, String> mapProduct, int idProduct, String fileName) throws IOException{
mapProduct.remove(idProduct);
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
for (Map.Entry<Integer, String> element: mapProduct.entrySet()
) {
//System.out.printf("%-8d"+"%s", element.getKey(), element.getValue() + "%n");
writer.write(String.format("%-8d"+"%s", element.getKey(), element.getValue()));
writer.newLine();
}
writer.close();
}
private static void updateString(Map<Integer, String> mapProduct, int idProduct, String productName, String price, String quantity, String fileName) throws IOException {
/*System.out.print(maxId);
System.out.print(" " + productName + " ");
System.out.print(price);
System.out.println(" " + quantity);*/
if (mapProduct.containsKey(idProduct)){
String aboutProduct = String.format("%-30.30s"+"%-8.8s"+"%-4.4s", productName, price, quantity);
mapProduct.put(idProduct, aboutProduct);
}
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
for (Map.Entry<Integer, String> element: mapProduct.entrySet()
) {
//System.out.printf("%-8d"+"%s", element.getKey(), element.getValue() + "%n");
writer.write(String.format("%-8d"+"%s", element.getKey(), element.getValue()) + "\n");
writer.flush();
}
writer.close();
}
private static Map<Integer, String> readFile(String fileName) {
Map<Integer, String> mapProduct = new TreeMap<>();
//System.out.println("privat method start");
try {
BufferedReader reader = new BufferedReader(new FileReader(fileName));
String line;
String product;
int id;
while ((line = reader.readLine())!= null){
id = Integer.parseInt(line.substring(0,8).trim());
//System.out.print("id is " + id + " ");
product = line.substring(8);
// System.out.println("product is " + product);
mapProduct.put(id, product);
}
reader.close();
} catch (FileNotFoundException foundException){
System.out.println("File not found");
}catch (IOException ioException){
System.out.println("Input-output error");
}
return mapProduct;
}
}