2012-02-06 43 views
11

Estoy usando FileWriter para escribir en un archivo y noté que incluso después de haber eliminado el archivo (fuera de proceso) el FileWriter no lanza ninguna excepción.Java escribiendo en un archivo eliminado

¿Es esto normal?

+2

¿Qué sistema operativo es esto? Por ejemplo, en Linux, hacer 'rm' solo desasocia el archivo de su ruta, y solo cuando se eliminen todos los identificadores del archivo se eliminará (puede recuperarse fácilmente si todavía está abierto). –

Respuesta

15

Esto depende de su sistema operativo:

  • En Windows, habitualmente se no ser capaz de eliminar un archivo abierto.
  • En Unix, eliminar un archivo abierto y continuar escribiendo en él (o leer de él) es perfectamente aceptable. Una vez que elimine el archivo, ya no tendrá una entrada de directorio. Sin embargo, su contenido continuará existiendo en el disco hasta que se cierre el archivo. Una vez que se cierren todos los identificadores abiertos que hacen referencia al archivo, el sistema operativo recuperará automáticamente el espacio en disco.
1

Sí, es normal. Usando la mayoría de las formas convencionales de hacer E/S, si el archivo no existe, lo crea para usted. Esto, por supuesto, pendiente de que lo haya borrado antes de que comenzó a escribir en él.

0

Un archivo puede aparecer en más de un lugar (con enlaces duros) Eliminar un archivo elimina uno de los enlaces duros (posiblemente el único) Si hay un enlace en otro lugar, el archivo sigue estando accesible.

Los archivos que se eliminan, pero abiertos, siguen ocupando espacio en el disco y, si son lo suficientemente grandes, pueden significar espacio y el tamaño de todos los archivos que puede encontrar en el disco es diferente.

BTW: Usted puede leer/escribir el contenido de un archivo abierto (suprimido o no) si nos fijamos en /proc/{pid}/fd/{fid}