Валидатор ругается на 4 последних пункта.
Конструкцию
String.format("%-8s%-30s%-8s%-4s", maxid + 1, args[1], args[2], args[3])
не использовал так как, если строки аргументы больше заданной длины, то они не обрезаютсяpackage com.javarush.task.task18.task1827;
/*
Прайсы
*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Scanner;
public class Solution {
public static void main(String[] args) throws Exception {
if (args.length != 0 && "-c".equals(args[0])) {
Scanner scanner = new Scanner(System.in);
String fileName = scanner.nextLine();
scanner.close();
// ищем максимальное значение id
BufferedReader reader = new BufferedReader(new FileReader(fileName));
int maxId = 0;
String line;
while ((line = reader.readLine()) != null) {
// парсим id считанной строчки таблицы
int currentId = Integer.parseInt(line.split(" ")[0]);
maxId = Math.max(currentId, maxId);
}
reader.close();
// собираем строку и пишем ее в файл
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true));
// добавляемая в файл строка должна начинаться с переноса на новую строку
StringBuilder row = new StringBuilder("\n");
// id
row.append(getFixedString(String.valueOf(maxId + 1), 8));
// productName
row.append(getFixedString(args[1], 30));
// price
row.append(getFixedString(args[2], 8));
// quantity
row.append(getFixedString(args[3], 4));
writer.append(row.toString());
writer.close();
}
}
/**
* @param sourceStr - исходная строка
* @param length - заданная длина
* @return строку на базе исходной
* Если длина строки меньше заданной длины, возвращяется строка дополненная пробелами
* Если длина строки равна заданной длине, возвращяется исходная строка
* Если длина строки больше заданной длины, возвращяется подстрока исходной строки заданной длины
*/
public static String getFixedString(String sourceStr, int length) {
return sourceStr.length() <= length ? String.format("%-"+ length + "s", sourceStr) : sourceStr.substring(0, length);
}
}