2016-04-20 13 views
0

Ich versuche, die Files.notExists-Methode zu verwenden, um zu überprüfen, ob ein Ordner nicht vorhanden ist. Es funktioniert gut mit lokalen Ressourcen in meinem Computer (Windows), aber wenn ich auf freigegebene Ressourcen zeige, gibt es immer falsch zurück. Die Situation ist folgende:Files.notExists immer falsch im Netzwerkverzeichnis

die nicht Existenz von lokalen Ressourcen Überprüfung:

String stringPath = "C:/existentFolder"; 
Path path = Paths.get(stringPath); 
Files.notExists(path) // false 
//OK, because the folder exists 

String stringPath = "C:/nonExistentFolder"; 
Path path = Paths.get(stringPath); 
Files.notExists(path) // true 
//OK, because the folder doesn't exists 

die nicht Existenz von gemeinsamen Ressourcen Überprüfung:

String stringPath = "\\sharedResourceName\existentFolder"; 
Path path = Paths.get(stringPath); 
Files.notExists(path) // false 
//OK, because the folder exists 

String stringPath = "\\sharedResourceName\nonExistentFolder"; 
Path path = Paths.get(stringPath);  
Files.notExists(path) // false 
//Why here it evaluates to false if it is indeed a non existent folder?? 
+0

Der Code in Ihrer Frage ist kein gültiger Java-Code. Es gibt keine Methode mit der Signatur 'Files.notExists (String)', nur 'Files.notExists (Pfadpfad, LinkOption ... Optionen)'. – Robert

+0

@Robert Ja, tut mir leid, ich vermisse einige Zeilen. Just edited – Arcones

Antwort

2

Die documentation of Files.notExists() Staaten:

Rückgabe: true, wenn die Datei nicht existiert; false, wenn die Datei vorhanden ist oder seine Existenz nicht

bestimmt werden kann, nehme ich an, dass un-mapped Netzwerkfreigaben nicht die Datei/Dateien Klassen zugegriffen werden kann, damit das Ergebnis nicht bestimmt werden kann (daher falsch).

Der folgende Code funktioniert wie erwartet mit Oracle Java 8:

String s = "\\\\myserver\\sharename\\directory"; 
    Path p = FileSystems.getDefault().getPath(s); 
    System.out.println(Files.notExists(p, LinkOption.NOFOLLOW_LINKS)); 
    System.out.println(!new File(s).exists()); 

Wenn der Pfad korrekt ist, gibt er zwei Mal false und wenn es vorhanden ist true. Haben Sie überprüft, dass die Netzwerkfreigabe im Windows Explorer verfügbar ist?

BTW: Der Name der verwendeten Netzwerkressource ist falsch. In Java müssen Sie den umgekehrten Schrägstrich umgehen, daher ist der korrekte String im Code für den Zugriff auf eine Netzwerkfreigabe (wenn es funktionieren würde) \\\\sharedResourceName\\existentFolder.

+1

Zuordnung gilt nur für Laufwerksbuchstaben. UNC-Pfade sind immer verwendbar. –

+0

Das funktioniert wie erwartet und löst mein Problem! Danke für den Code und die Erklärungen – Arcones

Verwandte Themen