java.lang.ClassCastException: java.lang.String无法转换为java.lang.Long

5

我创建了这个简单的示例,用于读取Linux运行时间:

public String getMachineUptime() throws IOException {
    String[] dic = readData().split(" ");

    long s = (long) Array.get(dic, 1);
    return calculateTime(s);
}

private String readData() throws IOException {
    byte[] fileBytes;
    File myFile = new File("/proc/uptime");
    if (myFile.exists()) {
        try {
            fileBytes = Files.readAllBytes(myFile.toPath());
        } catch (java.nio.file.AccessDeniedException e) {
            return null;
        }

        if (fileBytes.length > 0) {
            return new String(fileBytes);
        }
    }
    return null;
}

private String calculateTime(long seconds) {
    int day = (int) TimeUnit.SECONDS.toDays(seconds);
    long hours = TimeUnit.SECONDS.toHours(seconds)
            - TimeUnit.DAYS.toHours(day);
    long minute = TimeUnit.SECONDS.toMinutes(seconds)
            - TimeUnit.DAYS.toMinutes(day)
            - TimeUnit.HOURS.toMinutes(hours);
    long second = TimeUnit.SECONDS.toSeconds(seconds)
            - TimeUnit.DAYS.toSeconds(day)
            - TimeUnit.HOURS.toSeconds(hours)
            - TimeUnit.MINUTES.toSeconds(minute);

    return "Day " + day + " Hour " + hours + " Minute " + minute
            + " Seconds " + second;
}

当我运行代码时,会出现以下异常:

java.lang.ClassCastException: java.lang.String无法转换为java.lang.Long

是否有其他方法可以将结果转换?


这行代码是将数组'dic'的第二个元素转换为长整型数值并存储在变量's'中。 - Madhawa Priyashantha
你能帮我修复这个问题吗? - user1285928
2个回答

13

我认为你必须进行替换。

long s = (long) Array.get(dic, 1);
with
long s = Long.valueOf((String) Array.get(dic, 1));

或者更好的是:

long s = Long.valueOf(dic[1]);

原因是你的数组由String对象组成,直接强制转换是行不通的。


我得到了“No suitable method found for valueOf(Object)”错误 方法Long.valueOf(String)不适用 (参数不匹配;无法将Object转换为String) 方法Long.valueOf(long)不适用 (参数不匹配;无法将Object转换为long) - user1285928
现在我收到了这个消息 java.lang.NumberFormatException: For input string: "634618.11 - user1285928
2
嗯...这意味着它不是 long 而是 double。 :) - Konstantin Yovkov

4
问题似乎出现在以下行中:
long s = (long) Array.get(dic, 1);
  1. java.lang.reflect.Array的get(Object array, int index)方法返回一个Object实例,不能直接转换为long。

  2. 你可以通过dic[1]而不是Array.get(dic, 1)访问数组元素。

使用以下代码进行替换:

long s = Long.parseLong(dic[1]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接