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.
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.
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.