Java I/O: 设置时间戳

Java I/O: Setting time stamp

我正在阅读 Oracle 文档并遇到了一些对我来说看起来像是错误的东西。

也许有人可以确认,或者解释得比文档更好。

来源: https://docs.oracle.com/javase/tutorial/essential/io/fileAttr.html

代码:

Path file = ...;
BasicFileAttributes attr =
    Files.readAttributes(file, BasicFileAttributes.class);
long currentTime = System.currentTimeMillis();
FileTime ft = FileTime.fromMillis(currentTime);
Files.setLastModifiedTime(file, ft);

不应该在 attr 而不是 Files 上调用 setLastModifiedTime()? (attr.setLastModifiedTime(file, ft))

如果不需要,为什么还需要 attr

该方法的内部代码是:

  public static Path setLastModifiedTime(Path path, FileTime time)
        throws IOException
    {
        getFileAttributeView(path, BasicFileAttributeView.class)
            .setTimes(time, null, null);
        return path;
    }

如您所见,它使用 getFileAttributeView() 获取属性,然后在其上设置时间。

此方法只是方便 API 在文件 class 中提供。

BasicFileAttributes 用于获取许多文件系统的基本属性,它没有定义任何修改方法。因此,要修改 LastModifiedTime,您必须使用文件 class.

中定义的方法

仅供参考:Files

你是对的,attr在这个特定的片段中没有使用,它看起来像是不同片段的相同代码的复制粘贴,

因为片段的上下文是Basic File Attributes

示例前后,其他片段使用attr,如:

System.out.println("size: " + attr.size());  

System.out.println("isReadOnly is " + attr.isReadOnly());

因此,在此代码段中,您可以删除未使用的赋值行

BasicFileAttributes attr = Files.readAttributes(file, BasicFileAttributes.class);`