Java中的BasicFileAttributes与BasicFileAttributeView

Java中的BasicFileAttributes与BasicFileAttributeView,java,attributes,metadata,Java,Attributes,Metadata,这两个接口之间有什么区别?vs 我知道它们用于从文件中检索基本元数据,但它们之间究竟有什么不同 编辑:我之前的意思是,在下面的示例中,这两个接口可以互换使用。有什么区别吗?除此之外,为了首先使用视图访问属性,您必须调用.readAttributes()方法 BasicFileAttributeView bs = Files.getFileAttributeView(path, BasicFileAttributeView.class); BasicFileAttributes b

这两个接口之间有什么区别?vs

我知道它们用于从文件中检索基本元数据,但它们之间究竟有什么不同

编辑:我之前的意思是,在下面的示例中,这两个接口可以互换使用。有什么区别吗?除此之外,为了首先使用视图访问属性,您必须调用
.readAttributes()
方法

BasicFileAttributeView bs = Files.getFileAttributeView(path, BasicFileAttributeView.class);
        BasicFileAttributes bfa = Files.readAttributes(path, BasicFileAttributes.class);

接口只是它们描述的签名。因此,这两个接口之间的区别在于,它们需要实现其他签名的方法

如果您有BasicFileAttributeView实例,则可以使用
readAttributes()
获取BasicFileAttributes。如果没有BasicFileAttributeView(BFAV)实例,可以使用。我们保证您可以通过BFAV,即使它可能无法与FileAttributeView的每个子类一起工作

例如:

BasicFileAttributeView  bfav    = Files.getFileAttributeView(
                                   FileSystems.getDefault().getPath("/dev/null"),
                                   BasicFileAttributeView.class
                                  );
BasicFileAttributes     bfa     = bfav.readAttributes();
System.out.println(bfa.lastAccessTime());
  • 我们得到默认的文件系统,以便在下一步中使用它
  • 我们使用文件系统获得一条路径,以便在下一步中使用它
  • 我们使用路径获取基本文件属性视图(它表示读取基本文件属性的能力),以便
  • 我们使用BasicFileAttributeView获取BasicFileAttribute,以便
  • 我们得到了lastAccessTime(文件时间)
  • 我们使用

  • 好的,我用更多信息编辑了我的问题。非常感谢到目前为止的答案。因此,正如我在最新版本中添加的那样,它们基本上是可互换的吗edit@Rollerball:“可互换”意味着你可以随时用一个交换另一个。事实并非如此。在集合论中,它们甚至不是双射的,因为你不能从基本文件属性中得到一个完全工作的基本文件属性视图。但是,除非您想设置创建时间或访问时间,否则您可能永远不会有理由使用BFAView,因为正如您在问题中提到的,通过使用另一个助手方法,您可以很容易地获得BFA。因此,基本上视图只提供了一些可能对程序员有用的额外方法,它们不包含在BFA方法中,因为这会违反程序设计的内聚性,不是吗?@Rolleball:您需要视图来修改BFA中的数据。这样划分它可以很容易地看到修改属性的位置。可以从BFA视图中获取BFA的原因可能是,如果可以编写属性,则可以读取属性。可以说,这种划分构成了可读写对象(与相同数据相关)的内聚。像“反对程序设计的内聚性”这样的术语对我来说太模糊了:)