Если судить по текстовой формулировке валидатора, то все задачи были решены. И буфер, и потоки закрываю, и файл создаю в той же папке. Но ему что-то не нравится.
А что не так то? Сортировка идет правильно, проверял. В файлы в итоге пишется именно то, что нужно.
Я даже ридер на всякий случай закрываю.
Было предположение что остается по одному открытому потоку после цикла, но нет. Не остается.
package com.javarush.task.task18.task1825;
/*
Собираем файл
*/
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
List<File> list = new ArrayList<>();
while (true) {
String line = reader.readLine(); // читаем консоль
if (line.equals("end")) { // прерываем цикл, если "end"
reader.close();
break;
}
list.add(new File(line)); // если не прервалось, то добавляем в лист новый файл.
}
Collections.sort(list, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
int partNumber1 = Integer.parseInt(o1.getPath().substring(o1.getPath().lastIndexOf(".part") + 5).replace(" ", ""));
int partNumber2 = Integer.parseInt(o2.getPath().substring(o2.getPath().lastIndexOf(".part") + 5).replace(" ", ""));
return (partNumber1 < partNumber2) ? -1 : ((partNumber1 == partNumber2) ? 0 : 1);
}
}); // сортируем его по наименованию
for (int i = 0; i < list.size(); i++) {
String currentPathFile = list.get(i).toString();
String path = currentPathFile.substring(0, currentPathFile.lastIndexOf(".part")); // вытаскиваем общее название файла без части .part
FileOutputStream file = new FileOutputStream(path, true); // создаем OutputStream, true - означает что в файл данные добавляются
FileInputStream fileInput = new FileInputStream(list.get(i).getPath()); // создаем InputStream *.part файла
byte[] bytes = new byte[fileInput.available()];
fileInput.read(bytes); // читаем
fileInput.close(); // закрываем, т.к он больше не нужен. Все байты в массиве
file.write(bytes); // добавляем (потому что у нас при создании стоит добавление)
file.close(); // закрываем поток, если понадобится он откроется снова.
}
}
}