2014-10-27 8 views
-1

Я смущен о том, как сериализовать и десериализовать список объектов вопросов.Сериализация списка объектов

У меня есть Survey класса, который имеет атрибут Вопросы, который представляет собой список из Вопроса объектов.

Я хочу, чтобы иметь возможность сериализовать свойства съемки, а также все свойства каждого вопроса.

К сожалению, до сих пор мне не повезло, вот что у меня есть. Спасибо за помощь!

public void loadData(Boolean isSurvey) throws FileNotFoundException { 
    System.out.println("Select a file: "); 
    FileInputStream fileIn; 

    if (isSurvey) { 
     String fileName = listFiles("surveys").get(input.getIntInput(fileCount - 1)); 
     fileIn = new FileInputStream("surveys/" + fileName); 
    } else { 
     String fileName = listFiles("tests").get(input.getIntInput(fileCount - 1)); 
     fileIn = new FileInputStream("tests/" + fileName); 
    } 

    Question q = null; 
    try 
    { 
     ObjectInputStream in = new ObjectInputStream(fileIn); 
     q = (Question) in.readObject(); 
     in.close(); 
     fileIn.close(); 
    }catch(IOException i){ 
     i.printStackTrace(); 
    }catch(ClassNotFoundException c) { 
     System.out.println("Not found"); 
     c.printStackTrace(); 
    } 
    System.out.println("Deserialized Question..."); 
    System.out.println("prompt: " + q.prompt); 
} 

public void saveData(Survey survey, Test test, Boolean isSurvey, String fileName) { 
    try { 
     File surveyDir = new File("surveys"); 
     File testDir = new File("tests"); 

     if ((!(surveyDir.exists()) && isSurvey)) { 
      System.out.println("Creating Survey directory. . ."); 
      surveyDir.mkdir(); 
     } 
     if ((!(testDir.exists())) && !(isSurvey)) { 
      System.out.println("Creating Test directory. . ."); 
      testDir.mkdir(); 
     } 

     if (isSurvey) { 
      FileOutputStream fileOut = new FileOutputStream("surveys/" + fileName); 
      ObjectOutputStream out = new ObjectOutputStream(fileOut); 

      for (Question question : survey.questions) { 
       out.writeObject(survey.questions); 
      } 
      out.close(); 
      fileOut.close(); 
     } else { 
      FileOutputStream fileOut = new FileOutputStream("tests/" + fileName); 
      ObjectOutputStream out = new ObjectOutputStream(fileOut); 

      for (Question question : test.questions) { 
       out.writeObject(question); 
      } 
      out.close(); 
      fileOut.close(); 
     } 


    } catch(IOException i) { 
     i.printStackTrace(); 
    } 
} 
+0

«Не повезло» не является описанием проблемы. Попробуй еще раз. – EJP

+0

Неполный дубликат http://stackoverflow.com/questions/26598397/notserializableexception-even-after-implementing-serializable. – EJP

ответ

2

Вы уже реализовали свой объект писать с java.io.Serializable

import java.io.Serializable; 
public class Question implements Serializable { 

    //Other codes here 

} 

Другая вещь, которую я заметил, что вы написали объект коллекции.

for (Question question : survey.questions) { 
    out.writeObject(survey.questions); 
} 

Но вы читаете это как Вопрос объекта.

q = (Question) in.readObject(); 

Если объект, который вы написали, является Collection. Вот пример, если это Список коллекция

q = (List<Question>) in.readObject(); 
+0

Да, спасибо за ответ. – Brejuro

+0

Было ли это реализовано? –

+0

К сожалению, я не реализовал его во время публикации. Спасибо, хотя :( – Brejuro