Подскажите пожалуйста, что не так в коде? 3-й пункт не принимает. "Рекомендация от ментора: Товар с измененными данными должен находится на той же строке в файле." Но программа работает корректно, изменяет информацию о продукте в этой же строке, не добавляет никаких новых строк, не переносит измененное описание на другие строки.
package com.javarush.task.task18.task1828;
/*
Прайсы 2
*/
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class Solution {
//StringBuffer для полного имени продукта
private static StringBuffer productNameBuffer = new StringBuffer();
//ArrayList для чисел из массива args
private static List<String> listOfNumbers = new ArrayList<>();
//listAllProducts хранит всю информацию о продуктах из файла
private static List<String> listAllProducts = new ArrayList<>();
//listOfId хранит все id продуктов из файла
private static List<Integer> listOfId = new ArrayList<>();
public static void updateProduct(String[] args, String fileName) throws IOException {
BufferedReader fr = new BufferedReader(new FileReader(fileName));
String id = "";
String price = "";
String quantity = "";
//Проверка регуляркой, если число, то добавить в listOfNumbers иначе в productNameBuffer
for (int i = 1; i < args.length; i++) {
if (args[i].matches("[+-]?([0-9]*[.])?[0-9]+")) {
listOfNumbers.add(args[i]);
} else {
productNameBuffer.append(args[i]).append(" ");
}
}
//Присваиваем значения с listOfNumbers переменным id, price, quantity
for (int i = 0; i < listOfNumbers.size(); i += 3) {
id = listOfNumbers.get(i);
price = listOfNumbers.get(i + 1);
quantity = listOfNumbers.get(i + 2);
}
/*Считываем файл в списочный тип ArrayList listAllProducts*/
while (fr.ready()) {
listAllProducts.add(fr.readLine() + "\r\n");
}
String productName = productNameBuffer.toString().trim();
for (int i = 0; i < listAllProducts.size(); i++) {
if (listAllProducts.get(i).contains(id)) {
StringBuffer newProduct = new StringBuffer();
newProduct.append((String.format("%-8s%-30.30s%-8s%-4s", id, productName, price, quantity)) + "\r\n");
listAllProducts.set(i, newProduct.toString());
break;
}
}
listAllProducts.set(listAllProducts.size() - 1, listAllProducts.get(listAllProducts.size() - 1).trim());
StringBuffer reWriteContentFile = new StringBuffer();
for (int j = 0; j < listAllProducts.size(); j++) {
reWriteContentFile.append(listAllProducts.get(j));
}
if (reWriteContentFile.charAt(0) == '\uFEFF') {
reWriteContentFile.deleteCharAt(0);
}
FileOutputStream fw = new FileOutputStream(fileName);
// BufferedWriter fw = Files.newBufferedWriter(path, Charset.forName("UTF8"));
// BufferedWriter fw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), "UTF8"));
fw.write(reWriteContentFile.toString().getBytes());
fr.close();
fw.close();
}
public static void deleteProduct(String[] args, String fileName) throws IOException {
String id = "";
BufferedReader fr = new BufferedReader(new FileReader(fileName));
id = args[1];
while (fr.ready()) {
listAllProducts.add(fr.readLine());
}
for (int i = 0; i < listAllProducts.size(); i++) {
if (listAllProducts.get(i).contains(id)) {
listAllProducts.remove(i);
}
}
StringBuffer reWriteContentFile2 = new StringBuffer();
for (int j = 0; j < listAllProducts.size(); j++) {
reWriteContentFile2.append(listAllProducts.get(j)).append("\r\n");
}
reWriteContentFile2.delete(reWriteContentFile2.length() - 2, reWriteContentFile2.length());
// BufferedWriter fw2 = new BufferedWriter(new FileWriter(fileName));
FileOutputStream fos = new FileOutputStream(fileName);
// BufferedWriter fw2 = Files.newBufferedWriter(path, Charset.forName("UTF8"));
// BufferedWriter fw2 = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), "UTF8"));
fos.write(reWriteContentFile2.toString().getBytes());
fr.close();
fos.close();
}
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
switch (args[0]) {
case "-u":
updateProduct(args, fileName);
break;
case "-d":
deleteProduct(args,fileName);
break;
}
reader.close();
}
}