import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

public class Solution {

	public List<File> getDirList(File file){
		File[] dir = file.listFiles();
		List<File> dirList = new ArrayList<>();
		for(File f: dir){
			if(f.isDirectory()){
				dirList.add(f);
			}
		}
		return dirList;
	}
	public List<File> getFileList(File file){
		File[] dir = file.listFiles();
		List<File> fileList = new ArrayList<>();
		for(File f: dir){
			if(f.isFile()){
				fileList.add(f);
			}
		}
		return fileList;
	}
	public List<File> sortFileList(List<File> list){
		List<File> resultList = new ArrayList<>();
		Set<String> fileNameset = new TreeSet<>();
		for(File f: list){
			fileNameset.add(f.getName());
		}
		for(String s: fileNameset){
			for(File f: list){
				if(s.equals(f.getName())){
					resultList.add(f);
				}
			}
		}
		return resultList;
	}

    public static void main(String[] args) throws Exception {

    	File path = new File(args[0]);//testDirectory
    	File resultFileAbsolutePath = new File(args[1]);
    	File res = new File(resultFileAbsolutePath.getParent()+"\\allFilesContent.txt");
    	if(FileUtils.isExist(res)){
    		FileUtils.deleteFile(res);
    	}
    	FileUtils.renameFile(resultFileAbsolutePath, res);

    	List<File> dirList = new ArrayList<>();
    	List<File> buffList = new ArrayList<>();
    	List<File> buffList2;
    	Solution sol = new Solution();

    	buffList = sol.getDirList(path);
    	dirList.add(path);
    	dirList.addAll(buffList);
    	while(true){
    		buffList2 = new ArrayList<>();
    		for(File f: buffList){
    			buffList2.addAll(sol.getDirList(f));
    		}
    		dirList.addAll(buffList2);
    		buffList = new ArrayList<>(buffList2);
    		if(buffList2.size()==0){
    			break;
    		}
    	}

    	List<File> fileLIst = new ArrayList<>();
    	for(File f: dirList){
    		fileLIst.addAll(sol.getFileList(f));
    	}
    	List<File> sortedFileList = sol.sortFileList(fileLIst);

    	FileInputStream fis;
    	FileOutputStream fos = new FileOutputStream(res);
    	boolean isFirst = true;

    	for(File file: sortedFileList){
    		File f = file;
    		if(f.length()<=50){
    			if(!isFirst){
    				fos.write("\r\n".getBytes());
    			}
    			fis = new FileInputStream(f);
    			//fos.write((f.getName()+" ").getBytes());//потом затереть
    			while(fis.available()>0){
    				fos.write(fis.read());
    			}
    			isFirst = false;
    		}
    	}
    	fos.close();
    }
}