Уже неделю по вечера борюсь с этой задачей.
Я не могу понять, все кроме одного пункта проходит.
Сначала и поток открывал в методе "openAndWriteToFile", и валидатор не пропускал, но теперь валидатор ругается на 3 пункт, а это вся задача =(
Куда смотреть не знаю)
Использую HashMap, в которой ключ - имя файла, значение - ArrayList - в котором пути для этого одноименных файлов.
HashMap сам себя сразу сортирует.
а потом мы по этому HashMap идем и смотрим только на пути, которые лежат в ArrayList.
по итогу файл дописывает в переименованный все данные с изначального файла, в переименнованный.
Но валидатор говорит "иди учись, тряпка"
package com.javarush.task.task31.task3101;
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
File inputFile = new File(args[1]);
File fileForWrite = new File(inputFile.getParent() + File.separator + "allFilesContent.txt");
//rename file
FileUtils.renameFile(inputFile, fileForWrite);
//search all file and write to HashMap
Map<String, ArrayList<String>> files = new HashMap<String, ArrayList<String>>();
open(new File(args[0]),files);
System.out.println(files.size());
try {
FileOutputStream fileOutputStream = new FileOutputStream(fileForWrite,true);
for (Map.Entry<String,ArrayList<String>> x : files.entrySet())
{
for (String a : x.getValue())
{
System.out.println(a);
openAndWriteToFile(a,fileOutputStream);
}
}
fileOutputStream.close();
}
catch (Exception e)
{
}
}
public static void open (File inp, Map<String, ArrayList<String>> list)
{
System.out.println("Cheak : " + inp.getName());
//check file or directory
if(inp.isDirectory())
{
for (File a : inp.listFiles())
{
open(a,list);
}
}
if (inp.isFile()&&inp.length()<=50){
if (list.containsKey(inp.getName()))
{
list.get(inp.getName()).add(inp.getAbsolutePath());
}
else
{
ArrayList<String> listParth = new ArrayList<>();
listParth.add(inp.getAbsolutePath());
list.put(inp.getName(),listParth);
}
}
}
public static void openAndWriteToFile(String inputPath, FileOutputStream fileForWrite) {
try {
File fileInp = new File(inputPath);
FileInputStream fileInputStream = new FileInputStream(fileInp);
while (fileInputStream.available()>0)
{
fileForWrite.write(fileInputStream.read());
}
fileForWrite.write("\n".getBytes());
fileInputStream.close();
}
catch (Exception e)
{
System.out.printf("crash openandwrite");
}
}
}