Ошибка вылетает если я не вызову метод flush(). Вылетает на строчке writer.close(). Когда поток закрываю он же должен все содержимое буфера прокинуть в файл, почему нужно принудительно его заставлять до закрытия?
public class Solution {
    public static void main(String[] args) throws IOException {
        FileReader fileReader = new FileReader(args[0]);
        FileWriter fileWriter = new FileWriter(args[1]);
        BufferedReader reader = new BufferedReader(fileReader);
        BufferedWriter writer = new BufferedWriter(fileWriter);

        StringBuilder string = new StringBuilder();
        String[] strings;

        while(reader.ready()) {

            strings = reader.readLine().split(" ");

            for(int i = 0; i < strings.length; ++i)
                if(strings[i].length() > 6)
                    string.append(strings[i] + ",");
        }

        string.delete(string.length()-1, string.length());
        writer.write(string.toString());
        //writer.flush();


        fileReader.close();
        fileWriter.close();
        reader.close();
        writer.close();
    }
}