Не понимаю, в чём может быть ошибка. Программа выполняется правильно.
Я проверял правильность порядка частей файла (именно для этого использовал TreeMap, а не TreeSet).
Валидатор пишет, что не выполнены 2, 3, 4 и 5 условия, но они явно выполнены!
package com.javarush.task.task18.task1825;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;
/*
Собираем файл
Собираем файл из кусочков.
Считывать с консоли имена файлов.
Каждый файл имеет имя: [someName].partN.
Например, Lion.avi.part1, Lion.avi.part2, ..., Lion.avi.part37.
Имена файлов подаются в произвольном порядке. Ввод заканчивается словом "end".
В папке, где находятся все прочтенные файлы, создать файл без суффикса [.partN].
Например, Lion.avi.
В него переписать все байты из файлов-частей используя буфер.
Файлы переписывать в строгой последовательности, сначала первую часть, потом вторую, ..., в конце - последнюю.
Закрыть потоки.
Требования:
1. Программа должна считывать имена файлов с консоли, пока не будет введено слово "end".
2. Создай поток для записи в файл без суффикса [.partN] в папке, где находятся все считанные файлы.
3. В новый файл перепиши все байты из файлов-частей *.partN.
4. Чтение и запись должны происходить с использованием буфера.
5. Созданные для файлов потоки должны быть закрыты.
6. Не используй статические переменные.
*/
public class Solution {
public static void main(String[] args) throws Exception {
TreeMap<Integer, String> map = new TreeMap<>(); //при использовании TreeSet строк, 1.txt.part10 предшествует 1.txt.part2
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
for (String input = reader.readLine(); !input.equals("end"); input = reader.readLine()) {
int num = Integer.parseInt(input.substring(input.lastIndexOf("t")+1));
map.put(num, input);
}
reader.close();
for (Map.Entry<Integer, String> pair : map.entrySet()){
String fullFilename = pair.getValue();
Path p = Paths.get(fullFilename);
String filename = p.getFileName().toString(); //1.txt.part1
String path = p.getParent().toString(); //d:/dir/
String result = filename.substring(0, filename.lastIndexOf(".")); //1.txt
FileInputStream inStream = new FileInputStream(fullFilename);
FileOutputStream outStream = new FileOutputStream(path + result);
//System.out.println(fullFilename);
//System.out.println(path + result);
byte[] buffer = new byte[inStream.available()];
while (inStream.available() > 0)
{
int count = inStream.read(buffer);
outStream.write(buffer, 0, count);
}
inStream.close();
outStream.close();
}
}
}