Ich habe eine Datei mit dem Namen "aaaäaa.xls"
Dafür gibt File.isFile()
und File.isDirectory()
false
zurück? Warum gibt es false
in Linux
zurück?
Bitte versuchen Sie das folgende Codebeispiel
%Vor%Die Datei ist keine Datei
wenn es kein Verzeichnis ist und zusätzlich andere systemabhängige Kriterien erfüllt
Wenn die Ausnahme ausgelöst wird, müssen Sie den Dateipfad überprüfen.
Gemäß der Dokumentation :
public boolean isFile ()
Gibt zurück: true genau dann, wenn die Datei mit diesem abstrakten Pfadnamen existiert und ist eine normale Datei; sonst falsch.
Auf dieser Basis existiert Ihre Datei entweder nicht oder ist keine normale Datei.
Mögliche Gründe des 1.:
Mögliche Gründe der 2.:
Oder es ist ein Fehler in JVM. Es ist auch möglich, aber unwahrscheinlich. Zum Beispiel hatte ich sofort Probleme mit einem Ausrufezeichen in Pfadnamen - Bug 4523159 .
Wenn Sie auf die Datei zugreifen möchten, rufen Sie dir.listFiles()
und arbeiten mit seinem Rückgabewert.
(Die Antwort basiert teilweise auf Dieser Thread )
Überprüfen Sie die Berechtigungen der übergeordneten Verzeichnisse dieser Datei. Einige dieser Verzeichnisse verfügen möglicherweise nicht über die Berechtigung Ausführen für den aktuellen Benutzer.
Ich hatte auch Probleme mit file.isFile()
, die false
für Dateien zurückgeben, vermutlich weil die Datei nicht "regulär" ist, wie in anderen Antworten auf diese Frage erwähnt. Als Workaround verwende ich file.listFiles() != null
, was die benötigte Funktionalität zu bieten scheint. Laut der Java-Datei-API :
Wenn dieser abstrakte Pfadname kein Verzeichnis angibt, gibt diese Methode null zurück. Andernfalls wird ein Array von File-Objekten zurückgegeben.