"Создай объект File с новым именем файла allFilesContent.txt. Нужно указать полный путь." - так и есть, см. строку 22
"Нужно создать поток для записи в переименованный файл." - строка 31 (try with resource)
"Содержимое всех файлов, размер которых не превышает 50 байт, должно быть записано в файл allFilesContent.txt в отсортированном по имени файла порядке." - проверял, так и есть
"Поток для записи в файл нужно закрыть." - try with resource - закрывает. Я же могу его использовать в задании не указано обратное?
package com.javarush.task.task31.task3101;
import java.io.*;
import java.util.Map;
import java.util.TreeMap;
/*
Проход по дереву файлов
*/
public class Solution {
public static void main(String[] args) {
if (args.length != 2) {
System.out.println("Need set arguments: 1 - Path, 2 - file name for rename to allFilesContent.txt");
return;
}
File folder = new File(args[0]);
File resultFile = new File(args[1]);
if (FileUtils.isExist(folder) && FileUtils.isExist(resultFile)) {
File fileForOut = new File(new StringBuilder(folder.getAbsolutePath()).append('\\').append("allFilesContent.txt").toString());
FileUtils.renameFile(resultFile, fileForOut); //rename result file
if (FileUtils.isExist(fileForOut)) {
// collect file for job
Map<String, File> files = new TreeMap<>();
collectFilesInList(folder, files);
if (!files.isEmpty()) {
try (FileOutputStream fileOutputStream = new FileOutputStream(fileForOut)) {
for (File file : files.values()) {
try (FileInputStream fileInputStream = new FileInputStream(file)) {
byte[] buf = new byte[fileInputStream.available()];
fileInputStream.read(buf);
fileOutputStream.write(buf);
fileOutputStream.write('\n');
} catch (FileNotFoundException eI) {
eI.printStackTrace();
} catch (IOException eI) {
eI.printStackTrace();
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
private static void collectFilesInList(File startFolder, Map<String, File> collector) {
final String FILE_NAME_FOR_RENAME = "allFilesContent.txt";
final int MAX_FILE_SIZE = 50;
File[] files = startFolder.listFiles();
for (File file : files) {
if (file.isDirectory()) {
collectFilesInList(file, collector);
} else if (!file.getName().equals(FILE_NAME_FOR_RENAME) && file.length() <= MAX_FILE_SIZE) {
collector.put(file.getName(), file);
}
}
}
}