В своем говнокоде все непонятные моменты откомментил. Знаю, что рекомендуется делать через Set (судя по изначальному импорту), но нашел комментарии, что кто-то делал через map(только value не путь, а буфер с данными части файла).
package com.javarush.task.task18.task1825;
import java.io.*;
import java.util.*;
import java.util.regex.Pattern;
/*
Собираем файл
*/
public class Solution {
public static void main(String[] args) throws IOException {
//мапа для хранения порядковых номеров файлов(Integer) и путей к файлам(String)
//не уверен, что нужна TreeMap,
TreeMap <Integer, String> map = new TreeMap<Integer, String>();
String anotherText; //для пути либо "end"
String pathToPart = null; //если не "end" - пишем сюда путь к части файла
//сделано так, чтобы было за что ухватиться для извлечения имени
//для конечного файла, ибо another text может быть перезаписан на end.
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Pattern pattern = Pattern.compile("[:/A-z.]+.part");
//регулярка для извлечения порядкового номера
while (!(anotherText = reader.readLine()).equals("end")){
pathToPart = anotherText;
map.put(Integer.parseInt(pathToPart.replaceAll(String.valueOf(pattern), "")), pathToPart);
}
reader.close();
//заполнили мапу
Pattern pattern1 = Pattern.compile(".part[0-9]+");
String pathToFile = pathToPart.replaceAll(String.valueOf(pattern1), "");
//через регулярку нашли путь к конечному файлу
for(Map.Entry<Integer, String> entry : map.entrySet()){
FileInputStream inputStream = new FileInputStream(entry.getValue());
FileOutputStream outputStream = new FileOutputStream(pathToFile, true);
if(inputStream.available()>0){
byte[] buffer = new byte[inputStream.available()];
int count = inputStream.read(buffer);
outputStream.write(buffer, 0, count);
}
inputStream.close();
outputStream.close();
}
//записали через буфер
}
}