-1

基本上尝试以下代码段我得到一个 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(...),它返回一个不是 Long 的对象。此外,总是在同一页面上,在解释此方法的用法时,他们实际上是使用整数关键字来转换对象。是官方 oracle 文档的链接解释它。直接来自同一链接的方法用法:

使用示例:假设我们在支持“unix”视图的系统上需要文件所有者的用户 ID:

Path path = ...
int uid = (Integer)Files.getAttribute(path, "unix:uid");
4

3 回答 3

2

Files.getAttribute实际返回类型取决于属性,因此对于 "unix:uid" 它返回Integer但对于 "basic:size" 它返回Long. 而且您不能将 Long 转换为 Integer,反之亦然。

于 2013-05-05T10:12:18.990 回答
0

试试吧

Long size = (Long) Files.getAttribute(path, "basic:size", NOFOLLOW_LINKS);
System.out.println("Size: " + size);

您不能使用强制转换来转换 Java 中的引用类型。这意味着虽然您可以long转换为,int但不能Long转换为Integer.

于 2013-05-05T10:35:31.430 回答
0

类型转换失败,因为返回的属性值不是Integer.

返回的属性的名称和类型getAttribute(...)在相应AttributeView类的 javadocs 中指定。BasicFileAttributeView在这种情况下,状态size的javadocLong不是Integer.

(这是有道理的,因为文件的大小可以大于Integer.MAX_VALUE.)


教训:不要只看例子。您还需要阅读并理解文档的其余部分。

于 2013-05-05T10:37:48.697 回答