Не проходят почти все пункты валидацию, хотя судя по тестовым файлам все читается, записывается в порядке очереди. Проводал через ХэшМап с последующей сортировкой и через ТриМап та же песня. И файл новый создаю до переборка и чтения частей. Что не так помогите плиз.
package com.javarush.task.task18.task1825;
import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
Собираем файл
*/
public class Solution {
public static void main(String[] args) throws IOException {
boolean createNewFile = true;
BufferedOutputStream outputStream = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Map<Integer, String> mapFiles = new TreeMap<>();
while (true) {
// Чтение имен файлов
String fileName = br.readLine();
// Прерывание чтения имен файлов если введено end.
if ("end".equals(fileName)) {
// Закрытие потоков
br.close();
break;
}
// Выражение получает значение от точки до точки включительно
Pattern pattern = Pattern.compile("\\..+\\.");
Matcher matcher = pattern.matcher(fileName);
// Выражение получает значение числа в значении от точки до точки включительно (т.е в .partN.)
Pattern patternDigit = Pattern.compile("\\d+");
Matcher matcherDigit = patternDigit.matcher(fileName);
String resultSubstringPurt = "";
int resultNumberOfPart = 0;
// Значение от точки до точки включительно
while (matcher.find()) {
resultSubstringPurt = fileName.substring(matcher.start(), matcher.end());
}
// Значение номера части от точки до точки включительно
while (matcherDigit.find()) {
resultNumberOfPart = Integer.parseInt(fileName.substring(matcherDigit.start(), matcherDigit.end()));
}
// Запись частей как ключ и имен файлов как значение в мап.
mapFiles.put(resultNumberOfPart, fileName);
// Создание файла для записи частей без части (.partN.)
if (createNewFile) {
String newFileName = fileName.replace(resultSubstringPurt, ".");
outputStream = new BufferedOutputStream(new FileOutputStream(newFileName));
createNewFile = false;
}
}
// закрытие патока чтения из консоли
br.close();
byte[] buffer = null;
BufferedInputStream inputStream = null;
// Чтение входящего потока
for(Map.Entry<Integer, String> entry: mapFiles.entrySet()) {
inputStream = new BufferedInputStream(new FileInputStream(entry.getValue()));
if (inputStream.available() > 0) {
buffer = new byte[inputStream.available()];
inputStream.read(buffer);
// Запись исходящего потока
outputStream.write(buffer);
}
}
// Закрытие потоков
inputStream.close();
outputStream.close();
}
}