Не проходит валидацию почти по всем пунктам, даже на закрытие потоков, хотя все закрыл.
Сначала читаем весь файл, находим макс id, который в нем есть. Дальше проверяем есть ли входные аргументы и записываем в файл новые данные.
package com.javarush.task.task18.task1827;
/*
Прайсы
*/
import java.io.*;
import java.util.regex.Pattern;
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();
int maxId = getMaxIdInFile(fileName);
if (args.length != 0) {
if (args[0].equals("-c")) {
PrintWriter writer = new PrintWriter(new FileWriter(fileName, true)); // не переписываем старые значения из файла т.к стоит флаг true
writer.printf("%-8d%-30s%-8.2f%-4d\n", maxId + 1, args[1],Double.parseDouble(args[2]),Integer.parseInt(args[3]));
writer.close();
}
}
}
private static int getMaxIdInFile(String fileName) throws IOException {
BufferedReader fileReader = new BufferedReader(new FileReader(fileName));
String line;
int maxIdValue = -1;
Pattern pattern = Pattern.compile("^\\d+"); // находим значение id в каждой строке
while ((line = fileReader.readLine()) != null) {
String id = pattern.matcher(line).group();
if (Integer.parseInt(id) > maxIdValue) {
maxIdValue = Integer.parseInt(id); // при каждм проходе обновляем значения максимального id
}
}
fileReader.close();
return maxIdValue;
}
}