Всем привет.
Кому не лень поковырятся в чужом коде?))
Собственно, проблема в заголовке: глаза её не видят, что результат кода точно соответствует её требованиям) По крайней мере в идее.
Нужно как-то или код под неё подправить, или её отрезвить под рабочий код)
Оставляем маленький процент, что где-то тупанул и я - надеюсь, ткнете в правильное место!
Спасибо, кто откликнется!
package com.javarush.task.task18.task1827;
import java.io.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
/*
Прайсы
*/
public class Solution {
public static void main(String[] args) throws Exception {
if (args.length == 0) return;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
File file = new File(br.readLine());
if (args[0].equals("-c")) {
StringBuilder sb = new StringBuilder();
for (int i = 1; i < args.length - 2; i++)
sb.append(args[i]).append(" ");
sb.deleteCharAt(sb.length() - 1);
create(file, fill(sb.toString(), 30)
+ fill(args[args.length - 2], 8)
+ fill(args[args.length - 1], 4));
} else throw new RuntimeException();
}
public static List<String> read(File file) {
List<String> result = new ArrayList<>();
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
while (br.ready()) result.add(br.readLine());
} catch (IOException e) {
throw new RuntimeException();
}
return result;
}
public static void create(File file, String product) {
List<String> data = read(file);
int maxID = data.stream().map(x -> x.substring(0, 8).trim())
.map(Integer::parseInt).max(Comparator.comparingInt(a -> a)).orElse(-1);
String nextID = fill(Integer.toString(maxID + 1), 8);
try (BufferedWriter bw = new BufferedWriter(new FileWriter(file, true))) {
bw.write("\n" + nextID + product);
bw.flush();
} catch (IOException e) {
throw new RuntimeException();
}
}
public static String fill(String str, int number) {
if (str.length() > number) return str.substring(0, number);
else {
StringBuilder sb = new StringBuilder(number);
sb.append(str);
for (int i = str.length(); i < number; i++) sb.append(" ");
return sb.toString();
}
}
}