基本上尝试以下代码片段我得到一个ClassCastException:
public static void main (String []args)
{
Path path = Paths.get((System.getProperty("user.home")), "Desktop","usnumbers.txt");
try {
Integer size = (Integer)Files.getAttribute(path, "basic:size", NOFOLLOW_LINKS);
System.out.println("Size: " + size.toString());
} catch (IOException e) {
System.err.println(e);
}
}
}
一旦我使用Integer
更改关键字Long
,它就会得到修复。我查看了Files.getAttribute(...)
的文档,它返回的对象不是很长。此外,始终在同一页面中,在解释此方法的用法时,他们实际上使用Integer关键字来转换Object。 Here是解释它的官方oracle文档的链接。
直接来自同一链接的方法用法:
用法示例:假设我们需要文件所有者的用户ID 支持“unix”视图的系统:
Path path = ... int uid = (Integer)Files.getAttribute(path, "unix:uid");
答案 0 :(得分:2)
Files.getAttribute
实际的返回类型取决于属性,因此对于“unix:uid”,它返回Integer
但是对于“basic:size”,它返回Long
。并且你不能将Long转换为Integer,反之亦然。
答案 1 :(得分:0)
尝试改为
Long size = (Long) Files.getAttribute(path, "basic:size", NOFOLLOW_LINKS);
System.out.println("Size: " + size);
您不能使用强制转换来转换Java中的引用类型。这意味着,虽然您可以将long
投射到int
,但您无法将Long
投射到Integer
。
答案 2 :(得分:0)
类型转换失败,因为返回的属性值不是Integer
。
getAttribute(...)
返回的属性的名称和类型在各个AttributeView
类的javadocs中指定。在这种情况下,BasicFileAttributeView
的javadoc声明size
是Long
而不是Integer
。
(这是有道理的,因为文件的大小可能大于Integer.MAX_VALUE
。)
课程:不要只阅读示例。您还需要阅读并理解其余的文档。