2010-03-15 10 views
6

favor ver fragmento de código:Java File.isDirectory() devuelve false para un directorio en Linux

File[] additionalFiles = new File(FILE_PATH).listFiles(); 
boolean isDirectory = file.isDirectory(); 

He comprobado que la ruta del directorio es correcta, y cuando corro el código en Windows, el valor de isDirectory es verdadero (como debería ser). ¿Alguna sugerencia sobre por qué ocurre esto en Linux (RedHat Enterprise Linux)?

+0

¿Es el directorio un directorio regular, o un enlace simbólico? ¿Qué versión de Java? ¿Qué versión de RH? ¿El directorio contiene caracteres inusuales (no ingleses) en el nombre? – Yishai

+1

¿Cuál es el valor de 'FILE_PATH'? ¿Por casualidad contiene separadores de archivos estilo Windows ('\')? –

+0

Creo que es un simlink, el directorio está en un servidor compartido, ¿cómo afecta eso? La versión de Java es 6 actualización 17. La versión de RH es Enterprise RedHat 5. El directorio contiene todas las letras minúsculas, sin caracteres especiales, y los separadores de archivos son correctos (imprimí el directorio cuando ejecuté el programa, luego copié y lo pegué en la línea de comando después de "cd" y con éxito y cd'd al directorio). – shelt536

Respuesta

6

Los enlaces simbólicos no se muestran como directorios, si no recuerdo mal. La forma correcta en torno a que es:

new File(FILE_PATH).getCanonicalFile().isDirectory(); 

(NOTA: No comprobado, no tengo una máquina Linux para comprobar esto con facilidad).

5

Experimenté este problema una vez. Mi caso es muy gracioso, estaba leyendo la ruta desde un archivo de propiedades y esa ruta contenía un carácter de tabulación al final de la cadena. Esa fue la razón por la cual la ruta no fue reconocida como un directorio

+0

Tu y yo ambos :) – bjornl

Cuestiones relacionadas