2014-10-27 121 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