File.renameTo()
Parece que Java es problemático, especialmente en Windows. Como dice la documentación de la API ,
Muchos aspectos del comportamiento de este método dependen inherentemente de la plataforma: es posible que la operación de cambio de nombre no pueda mover un archivo de un sistema de archivos a otro, que no sea atómico y que no tenga éxito si un archivo con el nombre de ruta abstracto de destino ya existe. Siempre se debe verificar el valor de retorno para asegurarse de que la operación de cambio de nombre fue exitosa.
En mi caso, como parte de un procedimiento de actualización, necesito mover (renombrar) un directorio que puede contener gigabytes de datos (muchos subdirectorios y archivos de diferentes tamaños). El movimiento siempre se realiza dentro de la misma partición / unidad, por lo que no hay una necesidad real de mover físicamente todos los archivos en el disco.
No debería haber ningún archivo bloqueado en el contenido del directorio que se va a mover, pero aún así, con bastante frecuencia, renameTo () no hace su trabajo y devuelve falso. (Solo supongo que quizás algunos bloqueos de archivos caducan de forma algo arbitraria en Windows).
Actualmente tengo un método alternativo que usa copiar y eliminar, pero esto apesta porque puede llevar mucho tiempo, dependiendo del tamaño de la carpeta. También estoy considerando simplemente documentar el hecho de que el usuario puede mover la carpeta manualmente para evitar esperar horas, potencialmente. Pero el Camino Correcto obviamente sería algo automático y rápido.
Entonces, mi pregunta es, ¿conoce un enfoque alternativo y confiable para hacer un movimiento rápido / cambio de nombre con Java en Windows , ya sea con JDK simple o alguna biblioteca externa? O si conoce una manera fácil de detectar y liberar cualquier bloqueo de archivo para una carpeta determinada y todo su contenido (posiblemente miles de archivos individuales), también estaría bien.
Editar : En este caso particular, parece que nos salimos con la suya simplemente renameTo()
teniendo en cuenta algunas cosas más; ver esta respuesta .