С моей точки зрения - задача выполнена.
Есть две обертки - одна для FileWriter другая для FileReader
Данные перед чтением и записью привожу в формат, который указан в задании, пишу посимвольно.
Непонятка только с аргументами комманд лайна.
Или productName должен иметь возможность содержать пробел и тогда его нужно вбивать в аргументах вызова в " " или же не понятно вообще как аргументы командной строки парсить. Слить весь args в строку и брать подстроки по 8, 30 и так далее символов не выйдет, потому как если имя будет, например содержать 15 символов, после него сразу в такой строке будет price и следующие аргументы. Если брать по максимально возможным длинам из объединенного args - быстро вылетишь за границы строки. В общем - решил что подразумевается что productName может быть многострочным. А что подразумевали авторы курса - не известно.
Вот аргс
Скрин файла после записи не ложу - вон он там с классами лежит, и так видно что записало все по формату.
Собственно, что может раздражать валидатор?
Ну и в общем если кто-то какие-то ошибки увидит - буду благодарен
package com.javarush.task.task18.task1827;
/*
Прайсы
*/
import java.io.*;
import java.util.List;
public class Solution {
public static void main(String[] args) throws Exception {
if(args.length == 0 || !args[0].equals("-c")){
throw new IllegalArgumentException("Illegal command line args.");
}
File file = getFile();
List<Product> productsFromFile = getAllProducts(file);
int maxCurrentId = Product.getMaxId();
Product product = new Product(maxCurrentId,args[1],args[2],args[3]);
try (FileProductWriter fileProductWriter = new FileProductWriter(new BufferedWriter(new FileWriter(file,true)))) {
fileProductWriter.writeProduct(product);
}
/* switch (args[0]){
}*/
}
private static File getFile() throws IOException {
try (BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in))) {
String fileName = consoleReader.readLine();
return new File(fileName);
} catch (IOException e){
throw new IOException("Console reader failed.");
}
}
private static List<Product> getAllProducts(File file) throws IOException {
List<Product> allProductsFromFile;
try (FileProductReader fileProductReader = new FileProductReader(new BufferedReader(new FileReader(file)))) {
allProductsFromFile = fileProductReader.readAllProducts();
} catch (FileNotFoundException fnfe){
throw new FileNotFoundException("No such file found.");
} catch (IOException ioe){
throw new IOException("Failed to read current maximum Id.");
}
if( allProductsFromFile !=null){
return allProductsFromFile;
} else{
throw new IllegalStateException("Failed to read products data.");
}
}
}