I just wrote this code... and tested it ... seems to work perfectly :-)

In this code I saved a 2D array, offcourse you could as well replace the int[][] of the 2nd argument definition and make it any other kind of object ... you can even save instances of your own classes. (condition: the class needs to implement the Serializable interface).

Code:
  public void saveArray(String filename, int[][] output_veld) {
     try {
        FileOutputStream fos = new FileOutputStream(filename);
        GZIPOutputStream gzos = new GZIPOutputStream(fos);
        ObjectOutputStream out = new ObjectOutputStream(gzos);
        out.writeObject(output_veld);
        out.flush();
        out.close();
     }
     catch (IOException e) {
         System.out.println(e); 
     }
  }

  public int[][] loadArray(String filename) {
      try {
        FileInputStream fis = new FileInputStream(filename);
        GZIPInputStream gzis = new GZIPInputStream(fis);
        ObjectInputStream in = new ObjectInputStream(gzis);
        int[][] gelezen_veld = (int[][])in.readObject();
        in.close();
        return gelezen_veld;
      }
      catch (Exception e) {
          System.out.println(e);
      }
      return null;
  }
As you can see the files are also zipped. You can leave that out if you do not like it.

The (int[][]) is for casting the object to the original type. So if you change the code to make it change another type of instance then do not forget to change it !

I used this code for a supermario game to save and read my levels. It is easier than writing and reading from XML files.