这是转化类import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

class ObjectToXMLUtil 

 /** 
  * 把java的可序列化的对象(实现Serializable接口)序列化保存到XML文件里面,如果想一次保存多个可序列化对象请用集合进行封装 
  * 保存时将会用现在的对象原来的XML文件内容 
  * @param obj 要序列化的可序列化的对象 
  * @param fileName 带完全的保存路径的文件名  
  * @throws FileNotFoundException 指定位置的文件不存在 
  * @throws IOException 输出时发生异常 
  * @throws Exception 其他运行时异常 
  */ 
 public static void objectXmlEncoder(Object obj,String fileName) 
  throws FileNotFoundException,IOException,Exception 
 {   
  //创建输出文件 
  File fo = new File(fileName); 
  //文件不存在,就创建该文件 
  if(!fo.exists()) 
  { 
   //先创建文件的目录 
      String path = fileName.substring(0,fileName.lastIndexOf('.')); 
      File pFile = new File(path); 
      pFile.mkdirs();          
  } 
  //创建文件输出流 
  FileOutputStream fos = new FileOutputStream(fo); 
  //创建XML文件对象输出类实例 
  XMLEncoder encoder = new XMLEncoder(fos);   
  //对象序列化输出到XML文件 
  encoder.writeObject(obj); 
  encoder.flush();  
  //关闭序列化工具 
  encoder.close(); 
  //关闭输出流 
  fos.close();     
 }  
 /** 
  * 读取由objSource指定的XML文件中的序列化保存的对象,返回的结果经过了List封装 
  * @param objSource 带全部文件路径的文件全名 
  * @return 由XML文件里面保存的对象构成的List列表(可能是一个或者多个的序列化保存的对象)   
  * @throws FileNotFoundException 指定的对象读取资源不存在 
  * @throws IOException 读取发生错误 
  * @throws Exception 其他运行时异常发生 
  */ 
 public static List objectXmlDecoder(String objSource)  
  throws FileNotFoundException,IOException,Exception 
 { 
  List objList = new ArrayList();     
  File fin = new File(objSource); 
  FileInputStream fis = new FileInputStream(fin); 
  XMLDecoder decoder = new XMLDecoder(fis); 
  Object obj = null; 
  try 
  { 
   while( (obj = decoder.readObject()) != null) 
   { 
    objList.add(obj); 
   } 
  } 
  catch (Exception e) 
  { 
   // TODO Auto-generated catch block     
  } 
  fis.close(); 
  decoder.close();      
  return objList; 
 } 
}
这是两个测试类 其中Plane 实现的Serializable写XML时出错,而Buyer类没实现Serializable反而能写成功 
大家编译运行就知道有什么问题   搞定的能给我解释一下吗import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.LinkedList;
import java.util.ListIterator;import java.io.Serializable;
import java.util.LinkedList;
class Plane implements Serializable{ /**
 * 
 */
private static final long serialVersionUID = 4809242227391360060L;
/**
 * 
 */
private String strFlightID;
private String strAirportSrc;
private String strAirportDes;
private String strTimeSrc;
private String strTimeDes;
private int iSumTickets;
private int iRemainTickets;
private int iPrice;

public  LinkedList<Buyer> buyerList; public String getStrFlightID() {
return strFlightID;
} public void setStrFlightID(String strFlightID) {
this.strFlightID = strFlightID;
} public String getStrAirportSrc() {
return strAirportSrc;
} public void setStrAirportSrc(String strAirportSrc) {
this.strAirportSrc = strAirportSrc;
} public String getStrAirportDes() {
return strAirportDes;
} public void setStrAirportDes(String strAirportDes) {
this.strAirportDes = strAirportDes;
} public String getStrTimeSrc() {
return strTimeSrc;
} public void setStrTimeSrc(String strTimeSrc) {
this.strTimeSrc = strTimeSrc;
} public String getStrTimeDes() {
return strTimeDes;
} public void setStrTimeDes(String strTimeDes) {
this.strTimeDes = strTimeDes;
} public int getISumTickets() {
return iSumTickets;
} public void setISumTickets(int sumTickets) {
iSumTickets = sumTickets;
} public int getIRemainTickets() {
return iRemainTickets;
} public void setIRemainTickets(int remainTickets) {
iRemainTickets = remainTickets;
} public int getIPrice() {
return iPrice;
} public void setIPrice(int price) {
iPrice = price;
} public LinkedList<Buyer> getBuyerList() {
return buyerList;
} public void setBuyerList(LinkedList<Buyer> buyerList) {
this.buyerList = buyerList;
} @Override
public boolean equals(Object obj) {

return this.strFlightID.equals(((Flight)obj).getStrFlightID());
} public  Plane(){
createNode(null,null,null,null,null,0,0,0);
this.buyerList = new LinkedList<Buyer>();
} public Plane(String flight, String strAirportSrc, String strAirportDes,
String strTimeSrc, String strTimeDes, int sumTickets,
int remainTickets, int price) {
super();
createNode(flight, strAirportSrc, strAirportDes, strTimeSrc, strTimeDes, sumTickets,
 remainTickets, price);
this.buyerList = new LinkedList<Buyer>();
}

public  boolean createNode(String flight, String strAirportSrc, String strAirportDes,
String strTimeSrc, String strTimeDes, int sumTickets,
int remainTickets, int price) {

this.setStrAirportSrc(strAirportSrc);
this.setStrAirportDes(strAirportDes);
this.setStrTimeSrc(strTimeSrc);
this.setStrTimeDes(strTimeDes);
this.setStrFlightID(flight);
setISumTickets(sumTickets);
setIRemainTickets(remainTickets);
setIPrice(price);
return true;
}

public String toString(){
return new String(strFlightID + strAirportSrc + strAirportDes +
 strTimeSrc + strTimeDes + String.valueOf(iRemainTickets) +
 String.valueOf(iSumTickets) + String.valueOf(iPrice));
}
}
public class Buyer {
private String strID;
private String strName;
private int tickets; public String getStrID() {
return strID;
} public void setStrID(String strID) {
this.strID = strID;
} public String getStrName() {
return strName;
} public void setStrName(String strName) {
this.strName = strName;
} public void setTickets(int tickets) {
this.tickets = tickets;
}
public int getTickets() {
return tickets;
}

public Buyer() {
this(null,null);
}
public Buyer(String strID, String strName) {
super();
setNode(strID, strName,0);
} public Buyer(String strID, String strName, int tickets) {
setNode(strID, strName,tickets); }
public boolean setNode(String strID, String strName, int tickets) {
this.setStrID(strID);
this.setStrName(strName);
this.setTickets(tickets);
return true;
}

/* @Override
public Buyer getNode() {
return this;
} @Override
public Buyer getNext() {
return this.next;
} @Override
public boolean setNode(ListNode listnode) {
Buyer buyer = (Buyer)listnode;
this.setNode(buyer.getStrID(), buyer.getStrName());
return true;
} @Override
public void setNext(ListNode next) {
this.next = (Buyer)next;
}*/

public String toString(){

return new String("ID:"+this.strID+"  Name:"+this.strName + "  Tickets: "+this.tickets);
}
public static void main(String[] args) {
LinkedList<Buyer> buyerList = new LinkedList<Buyer>();
buyerList.addLast(new Buyer("001","Azrael",1));
buyerList.addLast(new Buyer("002","Kid",2));
buyerList.addLast(new Buyer("003","Connan",3));
buyerList.addLast(new Buyer("004","Lan"));

ListIterator<Buyer> li = buyerList.listIterator();
Buyer temp;
System.out.println(buyerList.get(3));
while(li.hasNext()){
temp = li.next();
System.out.println(temp.toString());

}

Plane p = new Plane("1","2","3","4","5",6,7,8);
LinkedList<Plane> PlaneList = new LinkedList<Plane>();
PlaneList.add(p);
try {
ObjectToXMLUtil.objectXmlEncoder(buyerList, "a.xml");
ObjectToXMLUtil.objectXmlEncoder(new Buyer("001","Azrael",1), "a2.xml");
ObjectToXMLUtil.objectXmlEncoder(PlaneList, "b.xml");
ObjectToXMLUtil.objectXmlEncoder(p, "b2.xml");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

//System.out.println(buyerList.hasNext().toString())new Flight("1","2","3","4","5",6,7,8);
}
}

解决方案 »

  1.   

     @Override
        public boolean equals(Object obj) {
            
            return this.strFlightID.equals(((Flight)obj).getStrFlightID());
        }
    Flight类贴出来!
      

  2.   

    不好意思 Flight 类就是Plane类以前的名字 后来由于要改动代码 就Copy了一份 
     equals就去掉好了
      

  3.   

    执行的时候抛出异常了:
    java.lang.IllegalAccessException: Class sun.reflect.misc.Trampoline can not access a member of class good.xml.Plane with modifiers "public"
    Continuing ...
    java.lang.Exception: XMLEncoder: discarding statement LinkedList.add(Plane);
    Continuing ...
    java.lang.IllegalAccessException: Class sun.reflect.misc.Trampoline can not access a member of class good.xml.Plane with modifiers "public"
    Continuing ...
    java.lang.Exception: XMLEncoder: discarding statement XMLEncoder.writeObject(Plane);
    Continuing ...异常处理:
    class Plane 定义为 public class Plane搞定!!