Java. Склейка файлов

177
01 августа 2018, 01:20

Учусь писать на Java, набросал код для склейки файлов(работает). Прошу указать в каких местах можно было бы сделать лучше(где я написал плохой код) + ответить на вопросы внизу.

Задание: Есть несколько файлов формата "filename.txt.partN". Ввести их имена с клавиатуры, затем создать в этом же каталоге файл "filename.txt" с последовательно записанными в нём данными. Имена вводятся в любом порядке. Ввод прекращается после ввода слова "end".

Так как в задании не нужно было проверять данные на корректность, проверок нет. Юзер "идеальный", только порядок файлов напутать может.

public static void main(String[] args) {
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
            String fileName;
            String sub = ".part";
            String stopWord = "end";
            byte[] buf = new byte[4096];
            ArrayList<String> fileNameList = new ArrayList<>();
            while (!(fileName = reader.readLine()).equals(stopWord)) {
                fileNameList.add(fileName);
            }
            if (fileNameList.isEmpty()) {
                System.out.println("Пустой лист.");
                return;
            }
            fileNameList.sort(Comparator.comparingInt(o -> Integer.parseInt(o.substring(o.lastIndexOf(sub) + sub.length()))));
            OutputStream fos = new FileOutputStream(new File(fileNameList.get(0).substring(0, fileNameList.get(0).lastIndexOf('.'))));
            for (String partFile : fileNameList) {
                InputStream is;
                try {
                    is = new FileInputStream(partFile);
                } catch (FileNotFoundException e) {
                    System.out.println("Файл " + partFile + " не найден.");
                    return;
                }
                int count = is.read(buf);
                do {
                    fos.write(buf, 0, count);
                }
                while (count == buf.length);
                is.close();
            }
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

По вашему, ArrayList это правильный выбор? Или лучше было использовать TreeSet?

Если бы мне нужно было проверять каждый файл в списке, то что работало бы быстрее для разумного количества файлов: регулярка или сравнение с filename + sub?

Заранее благодарю.

READ ALSO
Java JAR properties

Java JAR properties

Пытаюсь перезаписать properties, в IDE все получается, а в jar вылетает исключение:

167
Android создание таблицы

Android создание таблицы

Необходимо расположить элементы в виде таблицыПосмотрев примере, понял что есть несколько способов

143
Сортировка по году в списке с LocalDateTime

Сортировка по году в списке с LocalDateTime

Есть на входе не сортированный по дате список

163
SQLite Android и вывод данных в TextView

SQLite Android и вывод данных в TextView

Использую SQLite для хранения и доступа к данным в андроид-приложенииЗадаю

168