2012-06-14 3 views
0

Теперь мне интересно, могли бы вы, ребята, помочь мне в сериализации ArrayList в файл. Теперь я работаю над суммированием из школы, однако у меня нет реальной проблемы с кодированием. То, что я делаю, - это адресная книга GUI, и когда пользователь добавляет адрес, он сохраняется в arraylist и добавляется в comboBox. Это то, что я делаю. Я спрашиваю, можно ли сериализовать Arraylists. Если можете, можете вы, ребята, научить меня, как? Или, по крайней мере, дайте мне несколько уроков?Сериализация Arraylists

Большое вам спасибо. Если вы, ребята, должны увидеть код перед ответом, просто дайте мне знать, и я покажу его. Опять же, большое вам спасибо.

Хорошо здесь весь мой код:

import java.awt.EventQueue; 


public class Address_Book { 

    private JFrame frame; 
    private JTextField newName; 
    private JTextField newAddress; 
    private JTextField newPhoneAddress; 
    ArrayList<Book> test = new ArrayList<Book>(); 

    /** 
    * 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, поэтому я не знаю, является ли это одним и тем же процессом. Я просто просто прошу совета, или некоторые большие руководства по созданию сериализации SerialLists.

+0

Покажите это ... вы получите лучший ответ, если вы действительно что-то пробовали. – duffymo

+0

Это помогает? – Spartan

ответ

4

Из ArrayList документации here:

Все Реализованы интерфейсы: Сериализуемый, Cloneable, Iterable, Коллекция, Список, RandomAccess

Так что да, это сериализации. Делать это довольно просто, используя любой другой поток на Java, просто взгляните на ObjectOutputStream и на ObjectInputStream.

+0

Спасибо, Джек. – Spartan

4

Использование ObjectInputStream и ObjectOutputStream, что-то вроде:

public static void saveArrayListToFile(ArrayList<Book> books, String filePath) 
{ 
    ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(filePath))); 
    oos.writeObject(books); 
    oos.close(); 
} 

// ... 

public static ArrayList<Book> loadArrayListFromFile(String filePath) 
{ 
    ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(filePath))); 
    try 
    { 
     return (ArrayList<Book>) ois.readObject(); 
    } 
    finally 
    { 
     ois.close(); 
    } 
} 

Обратите внимание, что класс должен Book реализует Serializable интерфейс. Я не тестировал код, но он должен работать. Возможно, вам придется попытаться поймать любые исключения из приведенного выше кода.

Смежные вопросы