File Input Output Java

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class PersisTest extends JFrame implements ActionListener {
  ArrayList displayList = new ArrayList();;
  String pathname;
  JButton clearBtn, saveBtn, restoreBtn, quitBtn;
  public static void main(String args[]) {
    if (args.length == 0) {
      System.err.println("Usage: java PersisTest filename");
      System.exit(-1);
    }
    new PersisTest(args[0]).show();
  }
  public PersisTest(String pathname) {
    super("Save Me");
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.pathname = pathname;
    // Build the GUI. Make this object a listener for all actions.
    JPanel pan = new JPanel();
    clearBtn = new JButton("Clear");
    clearBtn.addActionListener(this);
    pan.add(clearBtn);
    saveBtn = new JButton("Save");
    saveBtn.addActionListener(this);
    pan.add(saveBtn);
    restoreBtn = new JButton("Restore");
    restoreBtn.addActionListener(this);
    pan.add(restoreBtn);
    quitBtn = new JButton("Quit");
    quitBtn.addActionListener(this);
    pan.add(quitBtn);
    Container c = getContentPane();
    c.add(pan, BorderLayout.NORTH);
    c.add(new ClickPanel(), BorderLayout.CENTER);
    setSize(350, 200);
  }
  public void actionPerformed(ActionEvent e) {
    if (e.getSource() == clearBtn) {
      // Repaint with an empty display list.
      displayList = new ArrayList();
      repaint();
    } else if (e.getSource() == saveBtn) {
      // Write display list array list to an object output stream.
      try {
        FileOutputStream fos = new FileOutputStream(pathname);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(displayList);
        oos.flush();
        oos.close();
        fos.close();
      } catch (IOException ex) {
        System.err.println("Trouble writing display list array list");
      }
    } else if (e.getSource() == restoreBtn) {
      // Read a new display list array list from an object input stream.
      try {
        FileInputStream fis = new FileInputStream(pathname);
        ObjectInputStream ois = new ObjectInputStream(fis);
        displayList = (ArrayList) (ois.readObject());
        ois.close();
        fis.close();
        repaint();
      } catch (ClassNotFoundException ex) {
        System.err.println("Trouble reading display list array list");
      } catch (IOException ex) {
        System.err.println("Trouble reading display list array list");
      }
    } else if (e.getSource() == quitBtn) {
      System.exit(0);
    }
  }
  class ClickPanel extends JPanel {
    ClickPanel() {
      MouseListener listener = new MouseAdapter() {
        public void mousePressed(MouseEvent e) {
          // Store x and y in display list array list.
          Point p = new Point(e.getX(), e.getY());
          displayList.add(p);
        }
        public void mouseReleased(MouseEvent e) {
          // Store x and y in display list array list, and request
          // repaint.
          Point p = new Point(e.getX(), e.getY());
          displayList.add(p);
          repaint();
        }
      };
      addMouseListener(listener);
    }
    public void paintComponent(Graphics g) {
      // Clear to white.
      g.setColor(Color.white);
      g.fillRect(0, 0, getSize().width, getSize().height);
      // Traverse display list, drawing 1 rect for each 2 points
      // in the array list.
      g.setColor(Color.black);
      int i = 0;
      while (i < displayList.size()) {
        Point p0 = (Point) (displayList.get(i++));
        Point p1 = (Point) (displayList.get(i++));
        int x = Math.min(p0.x, p1.x);
        int y = Math.min(p0.y, p1.y);
        int w = Math.abs(p0.x - p1.x);
        int h = Math.abs(p0.y - p1.y);
        g.drawRect(x, y, w, h);
      }
    }
  }
}