2014-10-13 3 views
0

Я создал этот простой пример, который используется для чтения Linux безотказной работы:java.lang.ClassCastException: java.lang.String не может быть приведен к java.lang.Long

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

есть ли другой способ преобразовать результат?

+0

этой линии .long s = (long) Array.get (dic, 1); –

+0

Можете ли вы помочь мне исправить это? – user1285928

+0

у вас есть ответ –

ответ

9

Я считаю, вы должны заменить

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

с

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

или даже лучше:

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

Причина в том, что ваш массив состоит из String объекта, и прямой Кастинг не будет работать.

+0

Я получаю это не подходящий метод для valueOf (Object) метод Long.valueOf (String) не применим (несоответствие аргумента; объект не может быть преобразован в String) метод Long.valueOf (long) is не применимо (аргумент несоответствие; объект не может быть преобразован в длинный) – user1285928

+0

См. мой обновленный ответ –

+0

Теперь я получаю это сообщение java.lang.NumberFormatException: для строки ввода: "634618.11 – user1285928

3

Проблема, как представляется, в следующей строке:

long s = (long) Array.get(dic, 1); 
  1. Метод Get (массив объектов, INT индекс) java.lang.reflect.Array возвращает экземпляр объекта, который не может быть непосредственно брошенным до конца.

  2. Вы можете получить доступ к элементу массива просто DIC [1] вместо Array.get (DIC, 1)

Заменить следующим кодом:

long s = Long.parseLong(dic[1]); 
Смежные вопросы