Написал условия на все случаи жизни
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Map<Integer, String> map = new TreeMap<>();
String str;
String index = "aaassdkl1";
String fname = "";
/**
* Читаем имена файлов и проверяем на корректность ввода
*/
String path2 = null;
while (!(str = reader.readLine()).equals("end") ) { //Вводим Lion.avi.part1
if (!str.equals("") && str.contains(".part") && str.contains(".txt")) {
if (path2 == null) path2 = str.substring(0, str.lastIndexOf(".part"));
index = str.substring(str.lastIndexOf(".part") + 5); //Индекс 1
map.put(Integer.parseInt(index), str);// В мапе хранится пара ключ: 1, значение: Lion.avi.part1
fname = str;
} else System.out.println("String is not correct, please enter again:");
}
reader.close();
String fileOutput = path2; // path хранит адрес места где читаем/записываем файлы добавляем к адресу имя файла без .partN = Lion.avi
FileOutputStream fileOutputStream = new FileOutputStream(fileOutput);
BufferedOutputStream bufferdOutputStream = new BufferedOutputStream(fileOutputStream);
for (Map.Entry<Integer, String> pair :
map.entrySet()) { // идем по парам мапы, TreeMap(записывает все элементы сортируя их по ключу)
String filepath = pair.getValue(); //добавляем к адресу чтеня имя конкретного файла из которого будем читать байты
FileInputStream fileInputStream = new FileInputStream(filepath);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
byte[] buffer = new byte[bufferedInputStream.available()]; //добавил только для валидатора, если BufferedInputStream ему не хватает
while (bufferedInputStream.available() > 0) {
bufferedInputStream.read(buffer);
bufferdOutputStream.write(buffer);
}
bufferedInputStream.close();
fileInputStream.close();
}
bufferdOutputStream.close();
fileOutputStream.close();
}