Может кто-то просмотреть что не так?
Под разными "соусами" запускал - всё работает. Меняет нужную строчку в соответствии с параметрами, но валидатор не пропускает и естественно не пишет почему. Может кто-то увидит ошибку?
Не пропускает по пункту 3:
"При запуске программы с параметрами "-u id productName price quantity" должна обновится информация о товаре в файле."
"Требование задачи не выполнено."
В чем оно не выполнено, если все работает?
package com.javarush.task.task18.task1828;
/*
Прайсы 2
*/
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine(); //считываем имя файла
reader.close();
BufferedReader reader1 = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "Cp1251")); //открываем поток чтения из файла с кодировкой Cp1251
String line, line1;
ArrayList<String> list = new ArrayList<>(); //создаем лист в который поместим все строки из файла
while ((line = reader1.readLine()) != null) {
list.add(line); //заполняем лист строками из файла
}
reader1.close(); //закрываем поток чтения из файла
String idString = args[1]; //считываем из args ID
idString = idString.replaceAll(" ", ""); //убираем из ID пробелы
int idargs = Integer.parseInt(idString); //переводим ID из строки в число
if (args != null && args.length > 0) { //проверяем что args не пустой
int iddel;
String iddelString;
for (int i = 0; i < list.size(); i++) { //цикл чтения list
line = list.get(i).substring(0, 8); //считываем ID 1ой строки из list
iddelString = line.replaceAll(" ", ""); //убираем пробелы из ID
iddel = Integer.parseInt(iddelString); // переводим String в число
if (idargs == iddel) { //если ID из args равно ID из list
if (args[0].equals("-d")) { // а также параметр -d
list.remove(i); //удаляем строку из списка
}
if (args[0].equals("-u")) { //если параметр -u
String productName, price, quantity; //вводим переменные для всей строки
int argsLength = args.length; //длина массива args
quantity = padRight(args[argsLength - 1], 4); //считываем quantity из args (последний параметр)
price = padRight(args[argsLength - 2], 8); //считываем цену из args (она предпоследняя)
String product = ""; //инициализируем переменную для продакт нейм
for (int j = 2; j < (argsLength - 2); j++) { //цикл чтения productName
product = product + args[j] + " "; //считываем все оставшиеся параметры из args начиная со 2ого (т.к. 0ой - -u; а 1ый - id
}
productName = padRight(product, 30); //форматируем productName по длине (укорачиваем или удлиняем)
iddelString = padRight(iddelString, 8); //id
line1 = iddelString + productName + price + quantity; //собираем строку целиком
list.set(i, line1); //заменяем элемент i из списка на новую строку из args
}
}
}
}
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), "Cp1251")); //открываем поток для записи
String lineSeparator = System.lineSeparator(); //разделить строки. чтобы начинать со следующей при записи
for (int i = 0; i < list.size(); i++) {
writer.write(list.get(i) + lineSeparator); //записываем list в файл построчно
}
writer.close(); //закрываем поток на запись
}
public static String padRight(String input, int length) { //метод форматирования строки до заданного количества символов
if (input.length() < length) {
return String.format("%1$-" + length + "s", input); // %1$ refers to the first substitution.
} else {
return input.substring(0, length);
}
}
}