2011-09-20 22 views
7

Mi estructura de archivos tiene un enlace simbólico a un directorio/home/me/myDir ->/some/other/dir. Este enlace se actualiza por otro proceso y notifica mi proceso. Tras la notificación intento de conseguir la nueva ruta canónica:ruta canónica del archivo en Java - ¿problema de optimización?

public static String getPath() 
{ 
    File file = new File("/home/me/myDir"); 
    if(file.exists()) 
    { 
     try 
     { 
     String canonical = file.getCanonicalPath(); 
     return canonical; 
     } 
     catch ... 
    } 

}

El problema es que después de que se cambie el enlace (un i haber verificado que cambia) que está tomando 3-5 veces de llamar a la sobre el método getPath() para obtener realmente la nueva ruta antes de que se devuelva la ruta anterior. Lo único que se me ocurre es que Java podría estar optimizando este método y devolviendo la ruta anterior. Cualquier idea o idea es muy apreciada.

Respuesta

12

Intente deshabilitar la memoria caché de canonización de Java. Esto se puede hacer estableciendo las propiedades del sistema sun.io.useCanonCaches y sun.io.useCanonPrefixCache en falso.

De forma predeterminada, los nombres de archivos canónicos se almacenan en caché durante 30 segundos (léalos de la fuente here).

+0

¡perfecto! ¡Gracias! – brad12s