Валидатор не принимает.
Запись в файл соответствует условию, тестил на разных входных данных...
package com.javarush.task.task18.task1827;
/*
Прайсы
CrUD для таблицы внутри файла.
Считать с консоли имя файла для операций CrUD.
Программа запускается со следующим набором параметров:
-c productName price quantity
Значения параметров:
где id - 8 символов.
productName - название товара, 30 символов.
price - цена, 8 символов.
quantity - количество, 4 символа.
-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. Созданные для файлов потоки должны быть закрыты.
*/
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class Solution {
public static void main(String[] args) throws Exception {
/*args = new String[4];
args[0] = "-c";
args[1] = "Куртка для сноубордистов, размер";
args[2] = "10173.998";
args[3] = "12345";*/
if (args != null) {
if (args[0].equals("-c")) {
Solution solution = new Solution();
String file = new BufferedReader(new InputStreamReader(System.in)).readLine();
int id = solution.generateId(file);
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file, true));
String newString = solution.generateNewString(id, args[1], args[2], args[3]);
byte[] bytes = newString.getBytes();
outputStream.write(bytes);
outputStream.close();
}
}
}
private int generateId (String file) throws IOException {
BufferedReader inputStream = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
List<String> lines = new ArrayList<>();
String line;
while ((line = inputStream.readLine()) != null){
if(!line.isEmpty()) lines.add(line);
}
if(lines.size() < 1) return 1;
else {
//System.out.println(lines.toString());
line = lines.get(lines.size()-1).substring(0, 8);
if(line.contains(" ")) line = line.substring(0, line.indexOf(" "));
lines.clear();
inputStream.close();
return Integer.parseInt(line) + 1;
}
}
private String generateNewString (int id, String productName, String price, String quantity){
String retString;
Solution solution = new Solution();
retString = solution.addSpaces(String.valueOf(id), 8);
retString += solution.addSpaces(productName, 30);
retString += solution.addSpaces(price, 8);
retString += solution.addSpaces(quantity, 4);
return retString + "\n";
}
private String addSpaces (String line, int size){
if(line.length() > size) return line.substring(0, size);
for (int i = size - line.length(); i > 0; i--){
line += " ";
}
return line;
}
}