Ich erhalte ein anderes Ergebnis für Files.exists(path)
zu 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 vielleicht machen die Berechtigungen keinen Sinn.Files.exists (Pfad) und path.toFile(). Exists() geben unterschiedliche Ergebnisse für die gleiche Datei
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. Noch kann ich sehen, wie man sieht, welcher 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, Dinge.
System.out.println("Path Exists(1):"+Files.exists(path));
System.out.println("Path Exist(2) :"+path.toFile().exists());
gibt
Path Exists(1):false
Path Exist(2) :true
Auch
System.out.println("Path readable(3) :"+Files.isReadable(path));
System.out.println("Path readable(4):"+path.toFile().canRead());
Arbeiten in gleicher Weise
Path readable(3) :false
Path readable(4):true
Berechtigungen Ausgabe
gebenFile C:\Code\jthink\opensrc\jaudiotagger\testdata\test157.dsf permissions
owner:PCLAPTOP\Paul
NT AUTHORITY\SYSTEM:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:DENY
BUILTIN\Administrators:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:DENY
BUILTIN\Administrators:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:ALLOW
NT AUTHORITY\SYSTEM:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:ALLOW
BUILTIN\Users:READ_DATA/READ_NAMED_ATTRS/EXECUTE/READ_ATTRIBUTES/READ_ACL/SYNCHRONIZE:ALLOW
NT AUTHORITY\Authenticated Users:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/SYNCHRONIZE:ALLOW
c:\Code\jthink\opensrc\jaudiotagger>attrib C:\Code\jthink\opensrc\jaudiotagger\testdata\test157.dsf
A R C:\Code\jthink\opensrc\jaudiotagger\testdata\test157.dsf
Aktualisieren Ich habe keine Schlussfolgerung, aber dachte, diese Informationen könnten nützlich sein.
Ich wurde aktiviert, ohne die IDE Run-Programm als Administrator Option Code in IntelliJ IDE ausgeführt wird, dies ermöglicht dann die Java-Anwendung auch die Administratorrechte erhalten verursacht haben zu.
Interessant für eine andere Datei Ich habe keine DENY-Berechtigungen hinzugefügt, ich habe nur Erben Berechtigungen deaktiviert und READ-Berechtigungen aus allen Gruppen entfernen. Dann, wenn ich als Benutzer ohne Lauf lief als Admin aktiviert konnte es nicht die Datei lesen und auch könnte diesen Code nicht ausgegeben, Informationen zu
AclFileAttributeView view = Files.getFileAttributeView(path, AclFileAttributeView.class);
if (view != null)
{
sb.append("Owner:"+view.getOwner().getName()+"**");
for (AclEntry acl : view.getAcl())
{
sb.append(acl.principal()+"**");
for(AclEntryPermission aep:acl.permissions())
{
sb.append(aep.toString() + "**");
}
}
}
aber wenn ich mit Run-Programm als Administrator ausführen aktivieren, damit nach wie vor die Datei, aber der obige Code tat jetzt Ausgabe einige der Berechtigungen könnte nicht wie folgt lauten:
Besitzer: BUILTIN \ Administratoren
NT AUTHORITY \ 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 sogar obwohl Administrators
keine oder READ PERMISSIONS
Optionen haben, können sie die Berechtigungen ausgeben, während sie vorher nicht konnten, vielleicht weil BUILTIN/Administrator als Eigentümer zurückgegeben wurde.
es ist eine Audiodatei. –
Wie bauen Sie 'Pfad'? –
Ive Ausgabe zu Frage hinzugefügt –