Привет.
1) Как вообще тестировать такого рода задачи, когда у нас входные данные через строку аргументов передаются?
2) Почему пишет: " поток чтения из файла не был закрыт".
3) Ну остальные проблемы пока вытекают из 1-ого пункта ибо я не могу проверить:
a) Нахожу ли я максимальный id среди уже добавленных товаров;
б) Верный ли формат строки;
в) Добавляется ли строка в конец файла.
package com.javarush.task.task18.task1827;
import java.io.*;
import java.text.Format;
import java.text.Normalizer;
import java.util.ArrayList;
import java.util.List;
public class Solution {
public static void main(String[] args) throws Exception {
//Не нужно ничего никуда добавлять
if(args.length != 4 || !args[0].equals("-c")){
return;
}
//Считываем имя файла с консоли
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String Path = reader.readLine();
reader.close();
//Добавляем товар в файл по пути Path, где args - данные о товаре
addItem(Path, args);
}
private static int findMaxID(String Path) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(Path));
List<String> lines = new ArrayList<>();
//Считываем все наши данные построчно и добавляем их в список
for(String info = reader.readLine(); !info.isEmpty(); info = reader.readLine()){
lines.add(info);
}
reader.close();
//Находим максимальный ID, который нам встречается в каждой строке
int maxId = 0;
for(String str : lines){
String[] row = str.split(" ");
if(Integer.parseInt(row[0]) > maxId){
maxId = Integer.parseInt(row[0]);
}
}
return maxId;
}
private static void addItem(String Path, String[] data) throws IOException {
int nextId = 1 + findMaxID(Path);
BufferedWriter writer = new BufferedWriter(new FileWriter(Path, true));
writer.append(String.format("\n%-8d%-30s%-8.2f%-4d", nextId, data[1], Float.parseFloat(data[2]), Integer.parseInt(data[3])));
writer.close();
}
}