Отрабатывает вроде нормально
package com.javarush.task.task18.task1825;
import java.io.*;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
Собираем файл
*/
public class Solution {
public static void main(String[] args) throws IOException {
TreeSet<String> filesPaths = new TreeSet<>(); // to sort paths
File output = null;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// 1st path
String fileDir = reader.readLine();
filesPaths.add(fileDir);
// template for filepaths
Pattern pattern = Pattern.compile("(^.*/)(.*)\\.part(\\d+)");
Matcher matcher = pattern.matcher(fileDir);
// creating output file
if (matcher.find()) {
output = new File (fileDir.substring(matcher.start(1), matcher.end(1)),
fileDir.substring(matcher.start(2), matcher.end(2)));
}
FileOutputStream fileOutputStream = new FileOutputStream(output.getAbsolutePath());
// sorting parts
while (!fileDir.equals("end")) {
filesPaths.add(fileDir);
fileDir = reader.readLine();
}
// writing
while (filesPaths.size() > 0) {
FileInputStream fileInputStream = new FileInputStream(filesPaths.first());
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
matcher = pattern.matcher(filesPaths.first());
if (matcher.find()) {
byte[] bytes = new byte[fileInputStream.available()];
fileInputStream.read(bytes);
fileOutputStream.write(bytes);
}
filesPaths.remove(filesPaths.first());
bufferedReader.close();
fileInputStream.close();
}
fileOutputStream.close();
reader.close();
}
}