мне конечно уже спать наверное пора, но в подсказке с невыполненной задачей валидатор мне пишет, что я не все потоки закрываю из файла, но это же не правда.
хотя код программы отрабатывает верно.
![]()

package com.javarush.task.task18.task1825;
import java.io.*;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;
import java.util.TreeSet;
/*
Собираем файл
*/
public class Solution {
public static void main(String[] args) throws IOException {
// считываем имена файлов
Scanner scan = new Scanner(System.in);
TreeSet<String> files = new TreeSet<>();
String fileName = null;
while (!(fileName = scan.nextLine()).equalsIgnoreCase("end"))
files.add(fileName);
scan.close();
// берём любое, в данном случае первое имя, для парсинга и создания
// файла, в который будем писать
File currentFile = new File((files.first()));
Path newPathFolder =
Paths.get(currentFile.getParent());
String newFileName = "";
String[] splitedFilename = currentFile.getPath().split("\\.");
for (int i = 0; i < splitedFilename.length - 1; ++i) {
newFileName += splitedFilename[i] + (i == splitedFilename.length - 2 ? "" : ".");
}
// склеиваем имя файла без окончания и создаем файл
File nameToCreateFileAndWrite =
newPathFolder.resolve(Paths.get(newFileName)).toFile();
nameToCreateFileAndWrite.createNewFile();
// работа с файлами
try (BufferedOutputStream bw =
new BufferedOutputStream(new FileOutputStream(nameToCreateFileAndWrite))) {
for (String file : files) {
try (BufferedInputStream bis =
new BufferedInputStream(new FileInputStream(file))) {
while (bis.available() > 0) {
bw.write(bis.read());
}
}
}
bw.flush();
}
}
}

