при тестировании код работает в соответствии с заданием, но валидатор не принимает пункты 3 и 4
Подскажите, есть ли ошибки в коде, либо ждать обновления валидатора? :)
Спасибо
package com.javarush.task.task18.task1828;
/*
Прайсы 2
*/
import java.io.*;
import java.util.ArrayList;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
reader.close();
if (args.length == 2 && args[0].equals("-d")) {
try {
delete(fileName, args[1]);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
if (args.length >= 5 && args[0].equals("-u")) {
String id = args[1];
String productName = "";
String price = args[args.length - 2];
String quantity = args[args.length - 1];
for (int i = 2; i < args.length - 2; i++) {
productName = productName + args[i];
if (i < args.length - 3) {
productName += " ";
}
}
update(fileName, id, productName, price, quantity);
}
}
private static ArrayList<String> getListFromFile(String fileName) throws IOException {
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(fileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
ArrayList<String> stringsOfFileName = new ArrayList<>();
String line;
while ((line = reader.readLine()) != null) { //формируем список строк из файла
if (line.equals("")) continue;
stringsOfFileName.add(line);
}
reader.close();
inputStream.close();
return stringsOfFileName;
}
private static void writeFileFromList(String fileName, ArrayList<String> stringsOfFileName) throws IOException {
FileOutputStream outputStream = new FileOutputStream(fileName);
Writer writer = new OutputStreamWriter(outputStream, "UTF-8");
for (int i = 0; i < stringsOfFileName.size(); i++) {
writer.write(stringsOfFileName.get(i));
if (i != stringsOfFileName.size() - 1) {
writer.write("\n\r");
}
}
writer.close();
outputStream.close();
}
//прочитать файл в строковый массив, а затем удалить в нём нужную строку
// и перезаписать исходный файл с новыми данными.
public static void delete(String fileName, String id) throws IOException {
ArrayList<String> stringsOfFileName = getListFromFile(fileName);
for (int i = 0; i < stringsOfFileName.size(); i++) { //удаляем из списка строку с id
String idInLine = stringsOfFileName.get(i).substring(0, 8).trim();
if (id.equals(idInLine)) {
stringsOfFileName.remove(i);
break;
}
}
//выводим список строк в файл
writeFileFromList(fileName, stringsOfFileName);
}
//прочитать файл в строковый массив, а затем заменить в нём нужную строку
// и перезаписать исходный файл с новыми данными.
public static void update(String fileName, String id, String productName, String price, String quantity) {
ArrayList<String> stringsOfFileName = null;
try {
stringsOfFileName = getListFromFile(fileName);
} catch (IOException e) {
e.printStackTrace();
}
StringBuffer newProduct = new StringBuffer();
newProduct.append((String.format("%-8s%-30.30s%-8s%-4s", id, productName, price, quantity)).trim());
for (int i = 0; i < stringsOfFileName.size(); i++) { //заменяем в списке строку с id
String idInLine = stringsOfFileName.get(i).substring(0, 8).trim();
if (id.equals(idInLine)) {
stringsOfFileName.remove(i);
stringsOfFileName.add(i, newProduct.toString());
break;
}
}
try {
writeFileFromList(fileName, stringsOfFileName);
} catch (IOException e) {
e.printStackTrace();
}
}
}