2010-03-15 4 views
6

Bitte Code-Schnipsel sehen:Java File.isDirectory() gibt Falsch für ein Verzeichnis in Linux

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

ich überprüft haben, dass der Verzeichnispfad korrekt ist, und wenn ich führen Sie den Code auf Windows, den Wert isDirectory ist wahr (wie es sein sollte). Irgendwelche Vorschläge, warum dies unter Linux (RedHat Enterprise Linux) geschieht?

+0

Ist das Verzeichnis ein reguläres Verzeichnis oder ein Symlink? Welche Version von Java? Welche Version von RH? Enthält das Verzeichnis ungewöhnliche (nicht englische) Zeichen im Namen? – Yishai

+1

Was ist der Wert von 'FILE_PATH'? Enthält es zufälligerweise Dateitrennzeichen im Windows-Stil ('\')? –

+0

Ich glaube, es ist ein Simlink, das Verzeichnis ist auf einem gemeinsamen Server - wie wirkt sich das aus? Die Java-Version ist 6 Update 17. Die RH-Version ist Enterprise RedHat 5. Das Verzeichnis enthält alle Kleinbuchstaben, keine Sonderzeichen und die Dateitrennzeichen sind korrekt (ich habe das Verzeichnis beim Ausführen des Programms ausgedruckt, dann kopiert und eingefügt in der Befehlszeile nach "cd" und erfolgreich und cd'd in das Verzeichnis). – shelt536

Antwort

6

Symlinks werden nicht als Verzeichnisse gelesen, wenn ich mich richtig erinnere. Der richtige Weg, um das heißt:

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

(HINWEIS: Ungeprüfte, ich habe keine Linux-Box habe dies leicht zu testen auf).

5

Ich habe dieses Problem einmal erlebt. Mein Fall ist so lustig, ich habe den Pfad von einer Eigenschaftendatei gelesen und dieser Pfad enthielt ein Tab-Zeichen am Ende der Zeichenfolge. Das war der Grund, warum der Pfad nicht als Verzeichnis erkannt wurde

+0

Du und ich beide :) – bjornl

Verwandte Themen