Использую TreeMap для сортировки.
Использую стринг вместо файл (хотя с файл удобнее)
Конечный файл создается именно в папке где находятся файлы-части
Все потоки закрыты.
Что не так?
package com.javarush.task.task18.task1825;
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Map<Integer,File> map = new HashMap<>();
//Блок обработки ввода
while(true){
String fileName = br.readLine();
if (fileName.equals("exit")) {
break;
}
String[] strings = fileName.split("\\.part",2);
File file = new File (fileName);
map.put(Integer.parseInt(strings[1]),file);
}
br.close();
//тут вычленяем один раз имя конечного файла
String[] str = map.get(1).getPath().split("\\.part", 2);
// Изначально был TreeMap<Integer, File> но потом почитал комменты, добавил грязный хак на трансформацию файл в стринг
Map<Integer, String> treeMap = new TreeMap<>();
for (Map.Entry<Integer, File> entry :
map.entrySet()) {
treeMap.put(entry.getKey(), entry.getValue().getAbsolutePath());
}
//открываем поток записи в конечный файл, используя ранее добытое имя
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(str[0]));
//Начинаем перебор всех наших файлов-частей по TreeMap
for (Map.Entry<Integer, String> entry:
treeMap.entrySet()){
String fileName = entry.getValue();
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(fileName));
int i=0;
while ((i = bufferedInputStream.read()) != -1){
bufferedOutputStream.write(i);
}
//закончили чтение, закрыли поток
bufferedInputStream.close();
}
//закончили запись закрыли поток ввода
bufferedOutputStream.close();
}
}