2016-03-29 5 views
0
$ touch file1.txt; sleep 60; ln -s file1.txt file2.txt; ls -l 
$ -rw-r--r-- 1 david staff 0 Mar 29 22:58 file1.txt 
$ lrwxr-xr-x 1 david staff 9 Mar 29 22:59 file2.txt -> file1.txt 

jedoch diese beiden Aussagen über die Zeitstempel von file1.txt zurück:java.io.File.lastModified für einen Link, den lastModified der Link-Datei erhalten, anstelle der verknüpften Datei

new java.io.File("file1.txt").lastModified() // Mar 29 22:58 
new java.io.File("file2.txt").lastModified() // Mar 29 22:58 

So erhält file2.txt die lastModified Informationen aus seiner verknüpften Datei.

gleiches Problem mit java.nio.file.Files:

Files.readAttributes(new java.io.File("file2.txt").toPath(), classOf[PosixFileAttributes]).lastModifiedTime.toMillis 

so, in Java/Scala, wenn ich eine Datei, die eine Verbindung ist, wie kann ich die lastModifiedTime (und Files.readAttributes.permissions) der Verknüpfungsdatei selbst (statt der verknüpften Datei), wie im Befehl ls -l?

Antwort

1

Javadoc für java.nio.file.Files:

public static FileTime getLastModifiedTime(Path path, 
             LinkOption... options) 
           throws IOException 

Gibt den Zeitpunkt der letzten Änderung der Datei.

Das Optionsarray kann verwendet werden, um anzuzeigen, wie symbolische Verbindungen für den Fall behandelt werden, dass die Datei eine symbolische Verbindung ist. Standardmäßig werden symbolische Links gefolgt und das Dateiattribut des endgültigen Ziels der Verknüpfung wird gelesen. Wenn die Option NOFOLLOW_LINKS vorhanden ist, werden symbolische Links nicht beachtet.

Verwandte Themen