Java: elimine la línea del archivo de texto sobrescribiéndola mientras la lee

Estoy tratando de eliminar una línea de texto de un archivo de texto sin copiarlo a un archivo temporal. Estoy tratando de hacer esto usando un Printwriter y un Scanner y haciendo que recorran el archivo al mismo tiempo, el escritor escribe lo que lee el Scanner y sobrescribe cada línea con la misma cosa, hasta que llegue a la línea que deseo borrar. Luego, avanzo el escáner pero no el escritor, y continúo como antes. Aquí está el código:

Pero primero, los parámetros: los nombres de mis archivos son números, por lo que esto leería 1.txt o 2.txt, etc., y f especifica el nombre del archivo. Lo convierto en una cadena en el constructor de un archivo. Int n es el índice de la línea que quiero eliminar.

public void deleteLine(int f, int n){
 try{
 Scanner reader = new Scanner(new File(f+".txt")); 
 PrintWriter writer = new PrintWriter(new FileWriter(new File(f+".txt")),false); 
 for(int w=0; w<n; w++)
   writer.write(reader.nextLine()); 
 reader.nextLine(); 
 while(reader.hasNextLine())
   writer.write(reader.nextLine());
 } catch(Exception e){
   System.err.println("Enjoy the stack trace!");
   e.printStackTrace();
 }
}

Me da errores extraños. Dice "NoSuchElementException" y "no se encontró línea" en el seguimiento de la pila. Apunta a diferentes líneas; parece que cualquiera de las llamadas nextLine () puede hacer esto. ¿Es posible eliminar una línea de esta manera? Si es así, ¿qué estoy haciendo mal? Si no, ¿por qué? (Por cierto, en caso de que desee esto, el archivo de texto tiene aproximadamente 500 líneas. Sin embargo, no sé si eso es tan grande o incluso importa).

Respuestas a la pregunta(3)

Su respuesta a la pregunta