xstream 讀寫對象(圖片)到xml

          做對象的序列化,到Xml的讀寫解決方法:
             
                  利用開源工具xstream進行對象的序列化到xml的讀寫,下面的項目主要是:針對一個含有圖片的對象的到xml的讀寫操作。

          項目結構及所需jar包:
                        

          實體類編寫:
          import com.thoughtworks.xstream.annotations.XStreamAlias;
          import com.thoughtworks.xstream.annotations.XStreamAsAttribute;

          @XStreamAlias("Preparation")
          public class Preparation {
              @XStreamAsAttribute
              public String preparationText;

              @XStreamAsAttribute
              public String preparationType;

              @XStreamAsAttribute
              public String questionText;
              
              @XStreamAsAttribute
              public String questionAnswer;
              
              @XStreamAsAttribute
              public String preparationImage;
              
              @XStreamAsAttribute
              public String responseable;

              public String getPreparationText() {
                  return preparationText;
              }

              public void setPreparationText(String preparationText) {
                  this.preparationText = preparationText;
              }

              public String getPreparationType() {
                  return preparationType;
              }

              public void setPreparationType(String preparationType) {
                  this.preparationType = preparationType;
              }

              public String getQuestionText() {
                  return questionText;
              }

              public void setQuestionText(String questionText) {
                  this.questionText = questionText;
              }

              public String getQuestionAnswer() {
                  return questionAnswer;
              }

              public void setQuestionAnswer(String questionAnswer) {
                  this.questionAnswer = questionAnswer;
              }

              public String getPreparationImage() {
                  return preparationImage;
              }

              public void setPreparationImage(String preparationImage) {
                  this.preparationImage = preparationImage;
              }

              public String getResponseable() {
                  return responseable;
              }

              public void setResponseable(String responseable) {
                  this.responseable = responseable;
              }

              @Override
              public String toString() {
                  // TODO Auto-generated method stub
                  return preparationText+";"+preparationImage;
              }
              

          }
           
          圖片操作類(將圖片轉換為字節流進行存儲并讀取)
          package cn.mccn.com.test;
          import java.io.BufferedInputStream;
          import java.io.BufferedOutputStream;
          import java.io.DataOutputStream;
          import java.io.File;
          import java.io.FileInputStream;
          import java.io.FileNotFoundException;
          import java.io.FileOutputStream;
          import java.io.IOException;

          import sun.misc.BASE64Decoder;
          import sun.misc.BASE64Encoder;

          public class Image {
              /*
               * 輸入流,讀取圖片或者Txt文件的字節碼
               
          */
              @SuppressWarnings("finally")
              public static String getRimg(String file1) {
                  StringBuilder builder = new StringBuilder(1000000);
                  byte[] bytes = null;
                  try {
                      new File(file1).createNewFile();
                      FileInputStream in = new FileInputStream(file1);
                      BufferedInputStream bis = new BufferedInputStream(in);
                      bytes = new byte[bis.available()];
                      bis.read(bytes);
                      bis.close();

                  } catch (FileNotFoundException e) {
                      e.printStackTrace();
                  } catch (IOException e) {
                      e.printStackTrace();
                  } finally {
                      return new BASE64Encoder().encodeBuffer(bytes);
                  }
              }
              /*
               * 輸出流,根據輸入流傳遞的字節碼生成圖片或者txt等文件
               
          */
              public static void getWimg(String content, String file2) {
                  try {
                      FileOutputStream out = new FileOutputStream(file2);
                      BufferedOutputStream bos = new BufferedOutputStream(out);
                      DataOutputStream dos = new DataOutputStream(bos);
                      byte[] bs = new BASE64Decoder().decodeBuffer(content);
                      dos.write(bs);
                      dos.flush();
                      dos.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
           
          }

          xml操作工具類(主要進行xml格式定制,讀寫xml)

          package cn.mccn.com.test;
          import java.io.FileWriter;
          import java.io.IOException;
          import java.io.InputStream;
          import java.util.List;
          import com.thoughtworks.xstream.XStream;
          import com.thoughtworks.xstream.io.xml.DomDriver;
          import cn.mccn.com.bean.*;
          public class Util {
              
              /** 定制Xml格式和屬性標簽*/
              private static XStream setXStream(XStream stream) {
           
               //   stream.alias("Page", Page.class);
                  
                  stream.alias("Preparation", Preparation.class);
                  stream.aliasAttribute(Preparation.class, "preparationText", "preparationText");
                  stream.aliasAttribute(Preparation.class, "preparationType", "preparationType");
                  stream.aliasAttribute(Preparation.class, "questionText", "questionText");
                  stream.aliasAttribute(Preparation.class, "questionAnswer", "questionAnswer");
                  stream.aliasAttribute(Preparation.class, "responseable", "responseable");
                  stream.aliasField("preparationImage", Preparation.class, "preparationImage");
                  
                  return stream;
           
              }
              
              /* * 根據定制創建Xml 文件 */
              public static String makeXML(List list) {
                  
                  XStream stream = new XStream();
                  stream = setXStream(stream);
                  System.out.println(stream.toString());
                  String str = stream.toXML(list);
                  System.out.println(str.toString());
                  return str;
           
              }
              
              /* * 將對象根據定制產生的內容寫入Xml 文件 */
              public static void writeXML(String s) {
           
                  FileWriter fw = null;    
                  String str="<?xml version='1.0' encoding='UTF-8'?>"+s;
                  try {
                      fw = new FileWriter("e:/testXtram.xml");
                      fw.write(str, 0, str.length());
                      fw.flush();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
           
              /** xstream方式解析Xml*/
              public static List readXML2(InputStream inputStream) {
           
                  XStream stream = new XStream(new DomDriver());
                  stream = setXStream(stream);
                  return (List) stream.fromXML(inputStream);
                  
              }
          }

          Main方法類(進行讀寫對象到xml的測試) 
          package cn.mccn.com.test; 

          import java.io.File;
          import java.io.FileInputStream;
          import java.io.FileNotFoundException;
          import java.io.InputStream;
          import java.util.ArrayList;
          import java.util.List;
          import cn.mccn.com.bean.*;
          public class Main {
              public static void insertXml(List list) {   
                  List preparations=new ArrayList();  
                  for (int i = 0; i < list.size(); i++) { 
                      Preparation preparation=new Preparation();
                      preparation=(Preparation)list.get(i);
                      String file1 =preparation.getPreparationImage();
                      String content = Image.getRimg(file1);
                      preparation.setPreparationImage(content.toString()); 
                      preparations.add(preparation);                      
                  }

                  Util.writeXML(Util.makeXML(preparations));
                  System.out.println(Util.makeXML(preparations).toString());
              }

              public static List  exportXml(String file,String file2) {
                  File f2 = new File(file);
                    List list=new ArrayList();
                    List list1=new ArrayList();
                  try {
                      InputStream in = new FileInputStream(f2);
                      list = Util.readXML2(in);
                      for (int i = 0; i < list.size(); i++) {
                          Preparation preparation = (Preparation) list.get(i);
                          String content = preparation.getPreparationImage();
                          Image.getWimg(content.trim(), file2+"1"+i+".jpg");
                          preparation.setPreparationImage(file2+"1"+i+".jpg");
                          list1.add(preparation);
                      }
                  } catch (FileNotFoundException e) {
                      e.printStackTrace();
                  }
                  return list1;
              }
              
               public static void main(String[]args){
                   Preparation preparation=new Preparation();
                   preparation.setQuestionText("張濤");
                   preparation.setPreparationType("0");
                   preparation.setPreparationText("0");
                   preparation.setPreparationImage("e:/0.jpg");
                   preparation.setQuestionAnswer("0");
                   preparation.setResponseable("0");
                   List list=new ArrayList();
                   
                  // list.add(preparation);
                  
          // insertXml(list);
                   
                   list= exportXml("e:/testXtram.xml", "f:/");
                   System.out.println(list.size()+";"+list.get(0).toString());
               }
          }

          posted on 2012-09-10 18:33 Nirvana reborn 閱讀(560) 評論(0)  編輯  收藏 所屬分類: ★開發經驗

          <2012年9月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          導航

          統計

          公告

          我好喜歡它,
          我的 QQ 66013804
          我想做技術流,可是我很懶,
          博客新地址:<a href="

          隨筆分類(19)

          文章檔案(1)

          博主鏈接

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 子洲县| 青龙| 崇信县| 毕节市| 靖宇县| 孝感市| 南陵县| 开化县| 十堰市| 山西省| 古蔺县| 五家渠市| 盱眙县| 沂源县| 封丘县| 富源县| 那曲县| 防城港市| 瑞丽市| 定边县| 水富县| 南川市| 西安市| 长汀县| 调兵山市| 苗栗市| 大方县| 辽源市| 陵水| 绥宁县| 琼结县| 游戏| 社旗县| 大名县| 汉川市| 隆安县| 湾仔区| 蛟河市| 通州市| 新野县| 巢湖市|