есть вот такая программа которая удаляет из файла совпадение по переменной int id = 19847; , вот собственно вопрос состоит в том что если BufferedWriter writer = new BufferedWriter(new FileWriter("C:\\Users\\Михаил\\Desktop\\1.txt")); находится в верху то программа кидает ошибку , а файл становится пустой но если его переместить в низ под удаление copyFile.remove(remove); то всё работает нормально не пойму в чем причина?
import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class bufferedreader {
    public static void main(String[] args) throws IOException {
        ArrayList<String> copyFile = new ArrayList<>();
        BufferedReader reader = new BufferedReader(new FileReader("C:\\Users\\Михаил\\Desktop\\1.txt"));
        BufferedWriter writer = new BufferedWriter(new FileWriter("C:\\Users\\Михаил\\Desktop\\1.txt"));

            int id = 19847;
            int remove = 0;
            String s;

            while ((s = reader.readLine()) != null){
                copyFile.add(s);
            }
            for (int i = 0; i < copyFile.size();i++){
                int z = Integer.parseInt(copyFile.get(i).substring(0,8).trim());
                if (z == id){
                    remove = i;
                }
            }

            copyFile.remove(remove);
// если сюда переместить BufferedWriter writer = new BufferedWriter(new FileWriter("C:\\Users\\Михаил\\Desktop\\1.txt")); то всё ок
            for (String sw: copyFile){
                System.out.println(sw);
                writer.write(sw + "\r\n");
            }
            reader.close();
            writer.close();
    }
}