Eliminación de archivos Java 6

Soy consciente de que esta pregunta es un duplicado furioso de esta pregunta. Sin embargo , ahora he leído esa página completa dos veces, y algunas secciones 3 veces, y por mi vida no veo cómo / dónde se responde.

Así que, a mi problema.

Estoy en el trabajo y estoy atascado usando Java 6 SE y no puedo actualizar a 7. Estoy escribiendo un progtwig que crea un archivo, lo escribe, procesa un poco y luego necesita eliminar el archivo de la existencia. Estoy teniendo exactamente el mismo problema que la persona que hizo la pregunta que mencioné anteriormente: Java no eliminará el archivo y no puedo entender por qué.

El código:

File f = null; FileWriter fw = null; try { f = new File("myFile.txt"); fw = new FileWriter(f); fw.write("This is a sentence that should appear in the file."); fw.flush(); if(f.delete()) System.out.println("File was successfully deleted."); else System.err.println("File was not deleted."); } catch(Exception exc) { System.err.println(exc.getMessage()); } catch(Error er { System.err.println(er.getMessage()); } catch(Throwable t) { System.err.println(t.getMessage()); } finally { fw.close(); } 

No está lanzando tiradores, errores o excepciones (los incluí para descartar todos los casos de borde). La segunda statement de impresión ( "File was not deleted." ) se está imprimiendo en la consola. Estoy ejecutando esto en Windows 7 y estoy escribiendo en una carpeta donde tengo permisos completos (rwx).

El usuario que hizo la pregunta a la que hice referencia contestó su propia pregunta, pero lo hace (en mi humilde opinión) de una manera no tan directa. En cualquier caso, estoy teniendo problemas para darle sentido. Él / ella parece estar aludiendo al hecho de que usar un BufferedReader en lugar de un FileInputStream marcó la diferencia para él / ella, pero simplemente no veo cómo se aplica eso.

Java 7 parece haber solucionado estos problemas con la introducción de una clase java.nio.file.Files , pero nuevamente, no puedo usar Java 7 por razones fuera del scope de mi control.

Otros respondedores a esa pregunta referenciada aluden a que se trata de un “error” en Java, y ofrecen todo tipo de System.gc() , como llamar explícitamente a System.gc() , etc. He intentado todo esto y no están funcionando.

Tal vez alguien pueda agregar una nueva perspectiva y trotar pensando en mí.

Está intentando eliminar () un archivo al que todavía hace referencia un FileWriter abierto y activo.

Prueba esto:

 f = new File("myFile.txt"); fw = new FileWriter(f); fw.write("This is a sentence that should appear in the file."); fw.flush(); fw.close(); // actually free any underlying file handles. if(f.delete()) System.out.println("File was successfully deleted."); else System.err.println("File was not deleted."); 

Solo puede eliminar el archivo si no hay ningún controlador de archivos abierto. Ya que abre el archivo que usa FileWriter , deberá cerrarlo antes de poder eliminarlo. En otras palabras, f.delete debe ejecutarse después de fw.close

Pruebe el siguiente código. Hice los cambios para evitar todos los posibles errores que pueda encontrar, por ejemplo, si fw es nulo.

 File f = null; FileWriter fw = null; try { f = new File("myFile.txt"); fw = new FileWriter(f); fw.write("This is a sentence that should appear in the file."); fw.flush(); // flush is not needed if this is all your code does. you data // is automatically flushed when you close fw } catch (Exception exc) { System.err.println(exc.getMessage()); } finally {// finally block is always executed. // fw may be null if an exception is raised in the construction if (fw != null) { fw.close(); } // checking if f is null is unneccessary. it is never be null. if (f.delete()) { System.out.println("File was successfully deleted."); } else { System.err.println("File was not deleted."); } }