Dado un objeto 'Archivo' de Java, ¿cómo puedo detectar si se refiere o no a un enlace simbólico?Detección de un enlace simbólico en Java
(Si ayuda/asuntos, sé que el archivo se refiere a un directorio, no a un archivo)
Dado un objeto 'Archivo' de Java, ¿cómo puedo detectar si se refiere o no a un enlace simbólico?Detección de un enlace simbólico en Java
(Si ayuda/asuntos, sé que el archivo se refiere a un directorio, no a un archivo)
File.getCanonicalPath()
resuelve enlaces simbólicos
Una ruta canónica es absoluta y única. La definición precisa de la forma canónica depende del sistema. Este método primero convierte este nombre de ruta a forma absoluta si es necesario, como si invoca el método getAbsolutePath() y luego lo mapea a su forma única de una manera dependiente del sistema. Esto generalmente implica eliminar nombres redundantes como "." y ".." desde la ruta, resolviendo enlaces simbólicos (en plataformas UNIX) y convirtiendo letras de unidad en un caso estándar (en plataformas Microsoft Windows).
supongo que se puede comparar el resultado de getCanonicalPath()
y getAbsolutePath()
.
Actualización: Al parecer, esta pregunta ya ha sido pedido - pagar the answers there
También se puede usar isSymbolicLink(Path path) método. Será más confiable.
java.io.File file = ...;
boolean isSymbolicLink = Files.isSymbolicLink(file.toPath());
Ejemplos similares de Java Doc 'Detecting a Symbolic Link'.
Solo en Java 7. – adelphus
Suena como que podría funcionar - Me pregunto qué tan caro es llamar a un objeto real del sistema de archivos (supongo que es necesario verificar cada directorio en el árbol, donde lo único que me importa es el último) ... –
Gracias - Usar el IO de los comunes de Apache como se indica en http://stackoverflow.com/questions/813710/java-1-6-determine-symbolic-links/813730#813730 parece una buena solución. –