CrUD для таблицы внутри файла
Считать с консоли имя файла для операций CrUD
Программа запускается с одним из следующих наборов параметров:
-u id productName price quantity
-d id
Значения параметров:
где id — 8 символов
productName — название товара, 30 chars (60 bytes)
price — цена, 8 символов
quantity — количество, 4 символа
-u — обновляет данные товара с заданным id
-d — производит физическое удаление товара с заданным id (все данные, которые относятся к переданному id)
В файле данные хранятся в следующей последовательности (без разделяющих пробелов):
id productName price quantity
Данные дополнены пробелами до их длины
Пример:
19846 Шорты пляжные синие 159.00 12
198478 Шорты пляжные черные с рисунко173.00 17
19847983Куртка для сноубордистов, разм10173.991234
Требования:
1. Программа должна считать имя файла для операций CrUD с консоли.
2. При запуске программы без параметров список товаров должен остаться неизменным.
3. При запуске программы с параметрами "-u id productName price quantity" должна обновится информация о товаре в файле.
4. При запуске программы с параметрами "-d id" строка товара с заданным id должна быть удалена из файла.
5. Созданные для файлов потоки должны быть закрыты.
Перемудрил конечно. Не привык еще к StringBuilder, format, RegEx. Но я так понимаю дело не в них, поскольку предыдущую задачу валидатор принял. Валидатор ругается на 3-й пункт "При запуске программы с параметрами "-u id productName price quantity" должна обновится информация о товаре в файле.". Все остальное выполнено (даже удаление). В моих проверках вроде этот пункт выполняется. Подскажите что исправить?
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String filename = reader.readLine();
reader.close();
FileInputStream is = new FileInputStream(filename);
byte[] start = new byte[is.available()];
is.read(start);
is.close();
String s1 = new String(start, "ASCII");
String[] s2 = s1.split("\\n");
char[] numbers = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
int arg = Integer.parseInt(args[1]);
if (args[0].equals("-u")){
//Создаю строку для замены
if (args[1].length() < 8) for (int d = 8 - args[1].length(); d > 0; d--) args[1] = args[1] + " ";
if (args[2].length() < 30) for (int d = 30 - args[2].length(); d > 0; d--) args[2] = args[2] + " ";
if (args[3].length() < 8) for (int d = 8 - args[3].length(); d > 0; d--) args[3] = args[3] + " ";
if (args[4].length() < 4) for (int d = 4 - args[4].length(); d > 0; d--) args[4] = args[4] + " ";
String sB = args[1] + args[2] + args[3] + args[4];
//В цикле ищу id и заменяю соответствующую строку в String[] s2
for (int c = 0; c < s2.length; c++) {
char[] chars = s2[c].toCharArray();
String idS = "";
for (int q = 0; q < 11; q++) for (int d = 0; d < numbers.length; d++) if (chars[q] == numbers[d]) idS = idS + chars[q];
int c2 = Integer.parseInt(idS);
if (arg == c2) s2[c] = sB;
}
}
if (args[0].equals("-d")){
for (int c = 0; c < s2.length; c++) {
char[] chars = s2[c].toCharArray();
String idS = "";
for (int q = 0; q < 11; q++) for (int d = 0; d < numbers.length; d++) if (chars[q] == numbers[d]) idS = idS + chars[q];
int c2 = Integer.parseInt(idS);
if (arg == c2) s2[c] = "-";
}
}
//Всё записываю в файл
String result = s2[0];
for (int i = 1; i < s2.length; i++) {
if (!s2[i].equals("-")) result = result + "\r\n" + s2[i];
}
byte[] end = result.getBytes();
FileOutputStream os = new FileOutputStream(filename);
os.write(end);
os.close();
//d:/File1.txt
//d:/Test.txt
}
}