Не понимаю, в чём проблема! Пробовал целиком перезаписывать файл и добавлять только последнюю строку.
package com.javarush.task.task18.task1827;
/*
Прайсы
CrUD для таблицы внутри файла.
Считать с консоли имя файла для операций CrUD.
Программа запускается со следующим набором параметров:
-c productName price quantity
Значения параметров:
где id - 8 символов.
productName - название товара, 30 символов.
price - цена, 8 символов.
quantity - количество, 4 символа.
8+30+8+4=50
-c - добавляет товар с заданными параметрами в конец файла, генерирует id самостоятельно, инкрементируя максимальный id, найденный в файле.
В файле данные хранятся в следующей последовательности (без разделяющих пробелов):
id productName price quantity
Данные дополнены пробелами до их длины.
19846 Шорты пляжные синие 159.00 12
198478 Шорты пляжные черные с рисунко173.00 17
19847983Куртка для сноубордистов, разм10173.991234
Требования:
1. Программа должна считать имя файла для операций CrUD с консоли.
2. В классе Solution не должны быть использованы статические переменные.
3. При запуске программы без параметров список товаров должен остаться неизменным.
4. При запуске программы с параметрами "-c productName price quantity" в конец файла должна добавится новая строка с товаром.
5. Товар должен иметь следующий id, после максимального, найденного в файле.
6. Форматирование новой строки товара должно четко совпадать с указанным в задании.
7. Созданные для файлов потоки должны быть закрыты.
***
В итоге, чтобы пропустил валидатор:
1. Надо предусмотреть случаи, если на входе productName меньше или больше 30 символов.
2. Если конструкции типа substring(0, 30) не обернуть в try, будет ругаться,
что поток входного файла не закрыт. Типа может выскочить ошибка и поток не закроется.
3. Надо предусмотреть случаи, если в конце файла нет перевода строки или есть перевод.
Я просто код последнего символа проверил.
4. Надо перебрать все id в файле и найти максимальный и к нему прибавить 1.
*/
import java.io.*;
public class Solution {
public static void main(String[] args) throws Exception {
//args = new String[] {"-c", "Вкусная", "Мята", "99.00", "10"};//затычка
if (args.length < 4 || !args[0].equals("-c")) return;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String filename = reader.readLine();
reader.close();
//String filename = "d:/1.txt";
String productName = "";
if (args.length > 4 ) {
for (int i = 1; i < args.length - 2; i++) {
productName = productName + args[i] + " ";
}
}
else productName = args[1];
productName = productName.trim();
String price = args[args.length - 2];
String quantity = args[args.length - 1];
Table table = new Table(filename);
table.addEntry(productName, price, quantity);
}
}