2014-10-27 126 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 2014-10-27 07:11:53

+0

http://stackoverflow.com/questions/26598397/notserializableexception-even-after-implementing-serializable不完整的重复。 – EJP 2014-10-28 00:04:19

回答

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(); 

如果你写的对象是一个集合。下面是一个例子,如果它是列表收集

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

是的,谢谢你的回应。 – Brejuro 2014-10-27 05:36:15

+0

实施它有效吗? – 2014-10-27 05:50:33

+0

不幸的是,我在发布时已经实现了它。谢谢虽然:( – Brejuro 2014-10-27 05:52:11