我有一個arrayList設置爲保存玩家數據。每名球員都有幾個元素,分別是球衣號碼,名字,姓氏,首選位置,進球和助攻。我希望能夠保存這些數據,以便在重新啓動程序時數據的格式仍然完全相同。從我讀過的一些東西看,序列化看起來是一種方式?這是正確的還是有更好的方法?我是Java的新手,所以任何示例都會很棒。我附上了我的代碼的幾個適用的片段。將對象的Arraylist保存到外部文件Java
//創建ArrayList的
public class LeagueDatabase extends javax.swing.JFrame {
ArrayList <blackTeam> blackTeam = new ArrayList <blackTeam>();
//類是如何構成的
class blackTeam {
int goals, assists;
String jerseyNum, firstName, lastName, prefPosition;
blackTeam (String _jerseyNum, String _firstName, String _lastName, String _prefPosition, int _goals, int _assists) {
jerseyNum = _jerseyNum;
firstName = _firstName;
lastName = _lastName;
prefPosition = _prefPosition;
goals = _goals;
assists = _assists;
}
}
//數據是如何添加
black = new blackTeam(jerseyNum, firstName, lastName, prefPosition, goals, assists);
blackTeam.add(black);
//我有什麼迄今保存數據
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
try{
FileOutputStream fos= new FileOutputStream("blackTeam");
ObjectOutputStream oos= new ObjectOutputStream(fos);
oos.writeObject(blackTeam);
oos.close();
fos.close();
}catch(IOException ioe){
ioe.printStackTrace();
}
//close program
System.exit(0);
}
});
如果有人可以解釋如何將數據保存到一個文件,然後該程序啓動時從該文件重新加載數據,這將是巨大的。
我實現了序列化,但我得到的錯誤信息「java.io.NotSerializableException:javax.swing.GroupLayout」當代碼運行時,你知道這是爲什麼?至於你將文件讀入對象的例子;如果我是正確的,你的例子將它保存爲一個列表,而不是像我想要的那樣的一個arrayList。我也可以通過在程序啓動時運行的代碼中執行「loadTeam():」來調用它。 @Orin – ckorvee
這是因爲'GroupLayout'對象不是可序列化的。因此,如果你的對象內有這樣的內容,除非將其標記爲瞬態,否則無法序列化它。是的,當你調用程序啓動時,你需要調用'loadTeam()',這會返回你想要的對象。是的,它將它保存爲List,但ArrayList是List的一個實現。如果你真的想,你可以用'ArrayList'來交換我的例子。 @ckorvee – Orin