while (input.ready()) {
            list.add(input.readLine());
        }
        input.close();


        Pattern pattern = Pattern.compile("\\d{1,8}");
        switch (args[0]) {
            case "-u":
                int id = Integer.parseInt(args[1]);
                for (String s : list) {
                    Matcher matcher = pattern.matcher(s.substring(0, 8));
                    matcher.find();
                    int listId = Integer.parseInt(matcher.group());
                    if (id == listId) {
                        int index = list.indexOf(s);
                        String newLine = String.format("%-8d%-30.30s%-8.8s%-4.4s", id, args[2], args[3], args[4]);
                        list.set(index, newLine);
                        break;
                    }
                }

                break;
            case "-d":
                Iterator<String> iter = list.iterator();
                while (iter.hasNext()) {
                    String product = iter.next();
                    if (product.startsWith(args[1]))
                        iter.remove();
                }
                break;

        }

        BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));

        for (String s : list) {
            System.out.println(s);
            writer.write(s);
            writer.newLine();
        }
        writer.close();


    }
}
1)почему решение с ArrayList тут в коментах называют топорным, какие еще есть более грамотные тогда решения? 2) почему если убрать writer.close файл не записывается? 3)Почему обязательно удаление из листа должно происходить через iterator. 4)можно сделать что бы после удаления инкременция не нарушалась, как? на сколько данное решение не оптимальное ? что можно изменить доработать? Зарание спасибо!