Files.exists (Pfad) und path.toFile (). exists () geben unterschiedliche Ergebnisse für dieselbe Datei an

8

Ich erhalte ein anderes Ergebnis für Files.exists(path) bis path.toFile().exists() für eine lokale Datei unter Windows. Ich kann diese Datei in Windows Explorer sehen, obwohl ich (zufällig) Berechtigungen geändert habe und die Berechtigungen möglicherweise keinen Sinn ergeben.

Dies erklärt jedoch nicht, warum die alte Methode true zurückgibt und die neue Methode false zurückgibt. Die Datei existiert definitiv, aber vielleicht ist sie für den Benutzer, der den Java-Code ausführt, unsichtbar, so dass ich nicht sicher bin, was die richtige Antwort sein sollte. Ich kann auch nicht sehen, wie der Benutzer den Code ausführt, es gibt nur einen echten Benutzer Paul auf dem Computer, aber ich frage mich, ob ob als Administrator ausgeführt wird oder nicht. p> %Vor%

gibt

%Vor%

Auch

%Vor%

funktioniert auf die gleiche Weise wie

%Vor%

Berechtigungen ausgegeben

%Vor%

Aktualisieren Ich habe keine Schlussfolgerung, dachte aber, dass diese Information nützlich sein könnte.

Ich habe Code in IntelliJ IDE ausgeführt, ohne dass die IDE Programm als Administrator ausführen -Option aktiviert war, was dazu führte, dass die Java-Anwendung auch die Administratorrechte erhielt.

Interessant für eine andere Datei Ich habe keine DENY-Berechtigungen hinzugefügt, ich habe nur die Erbenberechtigungen deaktiviert und die Leseberechtigungen von allen Gruppen entfernt. Dann, wenn ich als Benutzer lief, ohne als admin aktiviert zu laufen, konnte er die Datei nicht lesen und auch dieser Code konnte keine Informationen ausgeben

%Vor%

Aber wenn ich mit Programm als Adminstrator ausführen aktivierte, konnte es die Datei noch immer nicht lesen, aber der obige Code gab nun einige der Berechtigungen wie folgt aus:

  

Besitzer: BUILTIN \ Administratoren

     

NT-AUTORITÄT \ SYSTEM: WRITE_DATA / APPEND_DATA / WRITE_NAMED_ATTRS / WRITE_ATTRIBUTES / SYNCHRONIZE: ALLOW   PCLAPTOP \ Paul: WRITE_DATA / APPEND_DATA / WRITE_NAMED_ATTRS / WRITE_ATTRIBUTES / SYNCHRONIZE: ALLOW   BUILTIN \ Administratoren: WRITE_DATA / APPEND_DATA / WRITE_NAMED_ATTRS / WRITE_ATTRIBUTES / SYNCHRONIZE: ALLOW

Wie Sie sehen können, obwohl Administrators keine READ oder READ PERMISSIONS Optionen haben, können sie die Berechtigungen ausgeben, während sie vorher nicht konnten, vielleicht weil BUILTIN / Administraor als Eigentümer zurückgegeben wurde.

    
Paul Taylor 29.01.2016, 15:08
quelle

2 Antworten

4

Versuche das zu lesen: Ссылка

Es besagt, dass Files.exists(path) falsch zurückgibt nicht bedeutet, dass es nicht existiert, also ja, es scheint, es gibt ein Genehmigungsproblem. Probieren Sie auch Files.notExists(path) und sehen Sie, was es zurückgibt. Wenn es falsch ist, bedeutet dies, dass nicht festgestellt werden kann, ob die Datei existiert. Wenn sie jedoch wahr zurückgibt, liegt wahrscheinlich ein Problem in Ihrem Code vor.

Versuchen Sie, Ihre Datei über die Befehlszeile statt über NetBeans auszuführen. Wenn Sie nicht wissen, wie man das macht, können Sie einfach google suchen, es gibt Unmengen an Sachen, aber im Grunde wollen Sie die .java Datei mit javac myfile.java kompilieren und dann mit java myfile ausführen . Tun Sie dies mit einer normalen Eingabeaufforderung und einem, den Sie als Administrator öffnen, und sehen Sie, was Sie bekommen.

    
PNS 31.01.2016, 20:10
quelle
3

Thesen sind zwei verschiedene Methoden: Files.exists () und path.toFile (). exists ().

Files.exists () definiert dies Datei mit diesem abstrakten Pfadnamen existiert. Mit anderen Worten, diese Datei existiert und der Benutzer hat Lesezugriff darauf.

path.toFile (). exists () gibt an, dass die Datei existiert, dann gibt es keine Garantie dafür, dass ein Subsequenzzugriff erfolgreich ist. Mit anderen Worten, die Datei existiert, ohne zu überprüfen, dass der Benutzer READ-Zugriff darauf hat.

Es kommt wirklich auf den Benutzer an, der das Programm ausführt. Wenn Sie unter Ihrer ID (Paul) arbeiten, funktioniert es gut. Besonders in der Befehlszeile, wo Sie den ATTRIB-Befehl erhalten haben.

Wenn Sie jedoch eine andere Anwendung zum Ausführen Ihres Codes verwenden, hängt dies von der Systemkonfiguration ab. Führen Sie diesen ATTRIB oder einen ähnlichen Befehl in Ihrer Anwendung aus, und Sie werden sehen.

Ich glaube, Sie betreiben eine Website unter IIS. Dieser Weg wird normalerweise für Benutzer auf der untersten Ebene im System konfiguriert, mit fast keinen Rechten, um Sicherheitslücken zu vermeiden. Normalerweise sind es alle oder NT-AUTORITÄT. Wie ich sehen kann, hat dieser bestimmte Zugriff keine Rechte, Ihre Datei zu lesen

  

NT-AUTORITÄT \ SYSTEM: READ_DATA / ...: DENY

Natürlich haben Sie 2 verschiedene Antworten - FALSE: Benutzer, dessen ID von der laufenden Anwendung verwendet wird, kann diese Datei nicht lesen, TRUE: Datei existiert physisch.

Ändern Sie die laufende ID für Ihre Anwendung oder gewähren Sie READ Zugriff für alle Benutzer für diese spezielle Datei einschließlich aller Verzeichnisse in ihrem Pfad, und Sie erhalten das gleiche Ergebnis in diesen zwei Methoden, die verschiedene Bedeutungen überprüfen.

    
Alex 01.02.2016 02:54
quelle

Tags und Links