Everything works fine in IntelliJ. I put in a directory and file on my own computer to test it. Everything works. But for some reason, the tests don't like how I renamed the file. But it accepts the renamed file and writes to it properly. I'm ready to pull my hair out on this one. Any thoughts?
package com.codegym.task.task31.task3101;
import java.io.*;
import java.util.*;
/*
Iterating through a file tree
*/
public class Solution {
public static List<File> getFileTree(String root) {
List<File> list = new ArrayList<>();
Queue<File> queue = new LinkedList<>();
File rootDir = new File(root);
File parentDir = rootDir.getParentFile();
for (File file : rootDir.listFiles()) {
if (file.isFile() && file.exists()) {
list.add(file);
}
if (file.isDirectory() && file.exists()) {
queue.add(file);
}
}
Iterator iterator = queue.iterator();
while (iterator.hasNext()) {
if (queue.peek().exists()) {
if (queue.peek().isFile()) {
list.add(queue.poll());
}
else if (queue.peek().isDirectory()) {
File[] fileArray = queue.poll().listFiles();
Collections.addAll(queue, fileArray);
}
}
}
return list;
}
public static class FileComparator implements Comparator {
@Override
public int compare(Object o1, Object o2) {
return ((File) o1).getName().compareTo(((File) o2).getName());
}
}
public static void main(String[] args) throws IOException {
FileComparator comparator = new FileComparator();
if (args.length > 0) {
String path = args[0];
String resultFileAbsolutePath = args[1];
File beforeRename = new File(resultFileAbsolutePath);
List<File> tree = getFileTree(path);
File afterRename = new File(beforeRename.getParentFile().getAbsolutePath() + "\\allFilesContent.txt");
//System.out.println(afterRename);
FileUtils.renameFile(beforeRename, afterRename);
FileOutputStream output = new FileOutputStream(afterRename);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output));
Collections.sort(tree, comparator);
BufferedReader reader = null;
for (File f : tree) {
if (f.isFile() && f.length() <= 50 && f.exists()) {
System.out.println(f);
reader = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
while (reader.ready()) {
writer.write(reader.readLine());
writer.flush();
}
writer.write("\n");
}
}
writer.close();
output.close();
reader.close();
}
}
}