[英]java.lang.ClassCastException : java.lang.String cannot be cast to java.lang.Long
[英]java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
我创建了这个用于读取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
有没有其他方法来转换结果?
我相信你必须更换
long s = (long) Array.get(dic, 1);
同
long s = Long.valueOf((String) Array.get(dic, 1));
甚至更好:
long s = Long.valueOf(dic[1]);
原因是你的数组包含String
对象, 直接转换不起作用。
问题似乎在以下行:
long s = (long) Array.get(dic, 1);
java.lang.reflect.Array的get(Object array,int index)方法返回Object的实例,该实例不能直接强制转换为long。
您只需通过dic [1]而不是Array.get(dic,1)即可访问数组元素
替换为以下代码:
long s = Long.parseLong(dic[1]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.