2014-12-19 2 views
-1

У меня возникли проблемы с чтением arraylist из файла на Java.Объект не может быть отлит в ArrayList

У меня есть класс «Пользователь», который реализует Serializable, поэтому, когда я иду, чтобы сохранить ArrayList этих пользователей, он работает нормально, но когда я пытаюсь прочитать их, это совсем другая история.

ava.lang.ClassCastException: Пользователь не может быть приведен к java.util.ArrayList

Кодекса я для чтения в выглядит следующим образом ..

private List<User> userList = new ArrayList<User>(); 

public void readList() throws FileNotFoundException, IOException, ClassNotFoundException 
{ 
    System.out.println("Trying to read list.."); 
    FileInputStream fis = new FileInputStream("userList.txt"); 
    ObjectInputStream ois = new ObjectInputStream(fis); 
    System.out.println("Created Streams...."); 
    userList = ((ArrayList<User>)ois.readObject()); 
    ois.close(); 
} 

Кто-нибудь есть подобные проблемы или знаете как мне помочь?

Спасибо.

+1

'«Кто-нибудь есть подобные проблемы»' - у Вас есть ошибка в вашей программе, и мы все это переживали. Вам также нужно показать, как вы сериализуете данные, поскольку ваша десериализация не выполняется так, чтобы она была симметричной с вашей сериализацией. Похоже, вы сериализуете данные как объект User, а затем пытаетесь прочитать его как ArrayList, а это не так. –

+0

, пожалуйста, укажите пример кода о том, как вы сериализуете/сохраняете объект – kamoor

ответ

0

Если вы хотите десериализовать ArrayList из потока, вы должны обязательно сериализовать ArrayList в поток. Образом вы сериализовать ваши User объекты, то вам потребуется десериализовать их следующим образом:

private List<User> userList; 

public void readList() throws FileNotFoundException, IOException, ClassNotFoundException { 
    System.out.println("Trying to read list.."); 
    this.userList = new ArrayList<User>(); 
    FileInputStream fis = new FileInputStream("userList.txt"); 
    try { 
     ObjectInputStream ois = new ObjectInputStream(fis); 
     System.out.println("Created Streams...."); 

     // you would want to store this number in your object stream as userList.size() 
     int numberOfUsersSerialized = 5; 
     for (int i = 0; i < numberOfUsersSerialized; i++) { 
      userList.add((User) ois.readObject()); 
     } 
    } finally { 
     fis.close(); 
    } 
} 
Смежные вопросы