Как быть и почему? :-)
Постарался в коде вставлять комментарии-поэтому там все прозрачно.
package com.javarush.task.task18.task1825;
import java.io.*;
import java.util.*;
/*
Собираем файл
*/
public class Solution {
public static void main(String[] args) throws IOException {
Map<Integer, String> map = new TreeMap<>();
boolean filename_readed;
String total_filename=null;
while ((true))
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String filename = reader.readLine();
//ищем путь -где лежат файлы
int position = 0; // позиция на которой находится последний \ - то есть конец пути файла.
// Дальше пойдет его название.
for (int i = 0; i < filename.length(); i++) {
String temp = filename.substring(i, i + 1);
if (temp.equals("\\")) {
position = i;
}
}
/*String readed_file_name = filename.substring(position+1, filename.length());*/
//ищем цифру-номер куска
int devider_position = 0; //реальный номер куска будет начинаться отсюда и до конца строки
for (int i=filename.length(); i>0; i--)
{
String temp = filename.substring(i-1, i);
if (temp.equals("."))
{
devider_position = i;
}
}
total_filename = filename.substring(position, devider_position-1);
String part = filename.substring(devider_position+4, filename.length());
int part_number = Integer.parseInt(part) ;
map.put(part_number, filename);
reader.close();
if (!filename.equals("end"))
{
break;
}
}
//закончили наполнять базу. Теперь надо собрать файл, дергая записи из мапы:
for (int i=0; i<map.size(); i++)
{
FileInputStream fileInputStream = new FileInputStream(map.get(i));
FileOutputStream fileOutputStream = new FileOutputStream(total_filename);
byte[] buffer = new byte[1000];
while (fileInputStream.available() > 0) //пока есть еще непрочитанные байты
{
int count = fileInputStream.read(buffer);
fileOutputStream.write(buffer, 0, count);
}
fileInputStream.close();
fileOutputStream.close();
}
}
}