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);`
我正在阅读 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);`