序列化Arraylists

现在我想知道你们是否可以帮助我将ArrayList序列化到文件中。 现在我正在从学校开始总结,但是我没有真正的编码问题。 我正在制作的是一个GUI地址簿,当用户添加地址时,它会被存储到一个arraylist中并添加到comboBox中。 这就是我在做的事情。 我要问的是你是否可以序列化Arraylists。 如果可以,你们可以教我怎么样? 或者至少给我一些教程?

非常感谢。 如果你们在回答之前需要查看代码,请告诉我,我会告诉你。 再次,谢谢你。

好的,这是我的整个代码:

import java.awt.EventQueue; public class Address_Book { private JFrame frame; private JTextField newName; private JTextField newAddress; private JTextField newPhoneAddress; ArrayList test = new ArrayList(); /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Address_Book window = new Address_Book(); window.frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the application. */ public Address_Book() { initialize(); } /** * Initialize the contents of the frame. */ private void initialize() { frame = new JFrame(); frame.setBounds(100, 100, 371, 262); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(null); final JComboBox comboBox = new JComboBox(); final DefaultComboBoxModel model = new DefaultComboBoxModel(); newName = new JTextField(); newName.setBounds(10, 29, 79, 20); frame.getContentPane().add(newName); newName.setColumns(10); JLabel lbl1 = new JLabel("Enter New Name:"); lbl1.setBounds(10, 11, 107, 14); frame.getContentPane().add(lbl1); JLabel lbl2 = new JLabel("Enter New Address:"); lbl2.setBounds(110, 11, 107, 14); frame.getContentPane().add(lbl2); newAddress = new JTextField(); newAddress.setColumns(10); newAddress.setBounds(109, 29, 96, 20); frame.getContentPane().add(newAddress); newPhoneAddress = new JTextField(); newPhoneAddress.setColumns(10); newPhoneAddress.setBounds(215, 29, 130, 20); frame.getContentPane().add(newPhoneAddress); JLabel lbl3 = new JLabel("Enter New Phone number:"); lbl3.setBounds(215, 11, 140, 14); frame.getContentPane().add(lbl3); JButton btnAddNewContact = new JButton("Add new contact"); btnAddNewContact.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent arg0) { test.add( (new Book(newName.getText(), newAddress.getText(), newPhoneAddress.getText()))); //mergesort.mergesort(test, 0, test.size() - 1); model.removeAllElements(); for(int i=0; i < test.size();i++){ model.addElement(test.get(i).getContact()); } comboBox.setModel(model); newName.setText(""); newAddress.setText(""); newPhoneAddress.setText(""); } }); btnAddNewContact.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { } }); btnAddNewContact.setBounds(10, 53, 335, 23); frame.getContentPane().add(btnAddNewContact); JLabel lbl4 = new JLabel("Current Contacts:"); lbl4.setBounds(10, 87, 107, 14); frame.getContentPane().add(lbl4); comboBox.setModel(model); comboBox.setBounds(10, 101, 335, 20); comboBox.setSelectedIndex(test.size()-1); frame.getContentPane().add(comboBox); } } 

这是我的对象:

 public class Book implements Comparable { private String flName, Address, pNumber; public Book(String Name, String address, String phoneNumber ){ setFlName(Name); setAddress(address); setpNumber(phoneNumber); } public String getpNumber() { return pNumber; } public void setpNumber(String pNumber) { this.pNumber = pNumber; } public String getAddress() { return Address; } public void setAddress(String address) { Address = address; } public String getFlName() { return flName; } public void setFlName(String flName) { this.flName = flName; } public String getContact() { return flName + " " + Address + " " + pNumber; } public int compareTo(Object c) { Book testBook = (Book)c; if (testBook.getFlName().compareTo(this.getFlName()) < 0){ return(-1); }else if(testBook.getFlName().compareTo(this.getFlName()) == 0){ return(0); }else{ return(1); } } } 

现在,再次,我不确定如何使Arraylists可序列化。 我使用过对象,但没有使用Arraylists,所以我不知道它是否是同一个进程。 我只是在寻求建议,或者是一些关于使ArrayLists可序列化的精彩教程。

从这里的ArrayList文档:

所有已实现的接口:可序列化 ,可克隆,可迭代,集合,列表,随机访问

所以是的,它是可序列化的。 在Java中使用任何其他流非常简单,只需查看ObjectOutputStreamObjectInputStream

使用ObjectInputStreamObjectOutputStream ,如:

 public static void saveArrayListToFile(ArrayList books, String filePath) { ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(filePath))); oos.writeObject(books); oos.close(); } // ... public static ArrayList loadArrayListFromFile(String filePath) { ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(filePath))); try { return (ArrayList) ois.readObject(); } finally { ois.close(); } } 

请注意, Book类必须实现Serializable接口。 我没有测试代码,但它应该工作。 您可能需要尝试捕获上面代码中的任何exception。