Все как в условии, через буфер, все данные пишутся, все потоки закрываются, что валику не нравится?
package com.javarush.task.task18.task1825;
/*
Собираем файл
Собираем файл из кусочков.
Считывать с консоли имена файлов.
Каждый файл имеет имя: [someName].partN.
Например, Lion.avi.part1, Lion.avi.part2, ..., Lion.avi.part37.
Имена файлов подаются в произвольном порядке. Ввод заканчивается словом "end".
В папке, где находятся все прочтенные файлы, создать файл без суффикса [.partN].
Например, Lion.avi.
В него переписать все байты из файлов-частей используя буфер.
Файлы переписывать в строгой последовательности, сначала первую часть, потом вторую, ..., в конце - последнюю.
Закрыть потоки.
Требования:
1. Программа должна считывать имена файлов с консоли, пока не будет введено слово "end".
2. Создай поток для записи в файл без суффикса [.partN] в папке, где находятся все считанные файлы.
3. В новый файл перепиши все байты из файлов-частей *.partN.
4. Чтение и запись должны происходить с использованием буфера.
5. Созданные для файлов потоки должны быть закрыты.
6. Не используй статические переменные.
*/
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = null;
List<String> list = new ArrayList<>();
String s;
BufferedReader freader = null;
while (!(s = reader.readLine()).equals("end")) {
list.add(s);
}
try {
//create file
File f = new File(list.get(0).substring(0, list.get(0).indexOf(".part")));
if (f.createNewFile())
writer = new BufferedWriter(new FileWriter(f, true));
} catch (IOException e) {
e.printStackTrace();
}
// write file
for (int i = 0; i < list.size(); i++) {
try {
//вытаскиваю имя файла из листа
freader = new BufferedReader(new FileReader(list.get(i)));
while ((s = freader.readLine()) != null) {
//записываю из файла
writer.write(s + "\n");
writer.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
freader.close();
}
}
try {
if (writer != null) writer.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}