1. Говорит что я записываю файлы в порядке добавления, а не в порядке возрастания индекса: "Файлы переписывать нужно не в порядке добавления, а от первой части к последней." - Но TreeMap автоматом их сортирует по ключу.
2. "Чтение и запись должны происходить с использованием буфера" - он есть в цикле записи.
3. "Поток записи в файл не был закрыт." - завершающая программу строка закрывает этот поток.
package com.javarush.task.task18.task1825;
import java.io.*;
import java.util.*;
/*
Собираем файл
*/
public class Solution {
public static void main(String[] args) throws Exception{
TreeMap<Integer, String> pathMap = new TreeMap<>();
BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
while (true){
String s =rd.readLine();
if (s.equals( "end")){
rd.close();
break;
}
else {
String[] path = s.split("\\.");
pathMap.put(Integer.parseInt(path[path.length-1].replaceAll("[a-zA-Zа-яА-Я]*", "")),s);
}
}
String s ="";
s = pathMap.entrySet().stream().findFirst().map(Map.Entry::getValue).orElse(s);
String[] s1 = s.split("\\.part");
String newFileName = s1[0];
File file = new File(newFileName);
FileOutputStream fos = new FileOutputStream(file);
int endMarker = 0;
for (Map.Entry<Integer, String> pair : pathMap.entrySet()) {
FileInputStream fis = new FileInputStream(pair.getValue());
byte[] buffer = new byte[fis.available()];
int count = fis.read(buffer);
fos.write(buffer, endMarker, count);
endMarker = count;
fis.close();
}
fos.close();
}
}