CS结构软件自动升级实现(五)

来源:岁月联盟 编辑:zhuzhu 时间:2009-01-18

  Config.java处理配置文件:

 1/** *//********************************************************************
 2 * 项目名称        :rochoc<p>
 3 * 包名称         :com.rochoc.autoupdate<p>
 4 * 文件名称        :Config.java<p>
 5 * 编写者         :kfzx-luoc<p>
 6 * 编写日期        :2008-12-22<p>
 7 * 程序功能(类)描述  :<p>
 8 * 用于更新的配置文件读取对像
 9 * 程序变更日期      :
10 * 变更作者        :
11 * 变更说明        :
12********************************************************************/
13package com.rochoc.autoupdate;
14
15import java.io.File;
16import java.text.SimpleDateFormat;
17import java.util.Date;
18import java.util.List;
19
20import org.dom4j.Document;
21import org.dom4j.Element;
22import org.dom4j.io.SAXReader;
23
24
25/** *//**
26 * @author kfzx-luoc
27 *
28 * TODO To change the template for this generated type comment go to
29 * Window - Preferences - Java - Code Style - Code Templates
30 */
31public class Config
32{
33  public static String cfgFile = ".configautoupdate.xml";
34  private static Config config = null;
35  /** *//** xml的document*/
36  private Document doc = null;
37  public static Config getInstance()
38  {
39    if(config==null)
40    {
41      config = new Config();
42    }
43    return config;
44  }
45  
46  private Config()
47  {
48    try
49    {
50      SAXReader reader = new SAXReader();
51      doc = reader.read(cfgFile);
52    }catch(Exception e)
53    {
54      e.printStackTrace();
55    }
56  }
57  public void refresh()
58  {
59    config = new Config();
60  }
61  public String getVerstion()
62  {
63    if(config==null)
64    {
65      return "";
66    }
67    List lst = doc.selectNodes("Info/Version");
68    Element el = (Element)lst.get(0);
69    return el.getText();
70  }
71  public String getServerIp()
72  {
73    if(config==null)
74    {
75      return "";
76    }
77    List lst = doc.selectNodes("Info/UpdateServer/Ip");
78    Element el = (Element)lst.get(0);
79    return el.getText();
80  }
81  public UpdFile [] getFiles()
82  {
83    if(config==null)
84    {
85      return null;
86    }
87    List file = doc.selectNodes("Info/Files");
88    List lst = ((Element)file.get(0)).elements();
89    if(lst.size()==0)
90    {
91      return null;
92    }
93    UpdFile files[] = new UpdFile[lst.size()];
94    for(int i=0;i<lst.size();i++)
95    {
96      Element el = (Element)lst.get(i);
97      List childs = el.elements();
98      Element name = (Element)childs.get(0);//Name
99      Element path = (Element)childs.get(1);//Path
100      Element ver = (Element)childs.get(2);//Version
101      files[i] = new UpdFile(name.getText());
102      if("File".equals(el.getName()))
103      {
104        files[i].setType(0);//文件
105      }else
106      {
107        files[i].setType(1);//目录
108      }
109      files[i].setPath(path.getText());
110      files[i].setVersion(ver.getText());
111    }
112    return files;
113  }
114  public String getServerPort()
115  {
116    if(config==null)
117    {
118      return "";
119    }
120    List lst = doc.selectNodes("Info/UpdateServer/Port");
121    Element el = (Element)lst.get(0);
122    return el.getText();
123  }
124  public static void print(String msg)
125  {
126    SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss->>" );
127    String str = sdf.format( new Date());
128    System.out.println(str+msg);
129  }
130  public static void main(String args[])
131  {
132    Config cfg = Config.getInstance();    
133    UpdFile files[] = cfg.getFiles();
134    for(int i=0;i<files.length;i++)
135    {
136      System.out.println(files[i]);
137    }
138    Config.print("test");
139  }
140  /** *//**
141   * 格式化路径,增加其尾部的目录分隔符
142   *
143   * @param p 要格式化的目录字符串
144   */
145  public static String formatPath(String p)
146  {
147    if (!p.endsWith(File.separator))
148      return (p + File.separator);
149    return p;
150  }
151
152  /** *//**
153   * 格式化路径,去除其尾部的目录分隔符
154   *
155   * @param p 要格式化的目录字符串
156   */
157  public static String unformatPath(String p)
158  {
159    if (p.endsWith(File.separator))
160      return (p.substring(0, p.length()-1));
161    return p;
162  }
163  public static byte[] getCmd(String cmd)
164  {
165    //第一位用于标识是命令,后面8位为命令名
166    byte cmdb [] = new byte[9];
167    cmdb[0] = AUPD.CMD_DATA_SECT;
168    byte [] tmp = cmd.getBytes();
169    if(tmp.length!=8)
170    {
171      Config.print("命令有误:"+cmd+"<<");
172      return null;
173    }
174    for(int i=0;i<8;i++)
175    {
176      cmdb[i+1] = tmp[i];
177    }
178    return cmdb;
179  }
180  public static String parseCmd(byte cmd[])
181  {
182    return new String(cmd,0,8);
183  }
184  public static byte [] getLen(int len)
185  {
186    String slen = String.valueOf(len);
187    while(slen.length()<4)
188    {
189      slen = "0"+slen;
190    }
191    return slen.getBytes();
192  }
193  public static void copyArray(byte objary[], byte souary[], int o_begin,
194      int s_begin, int len)
195  {
196    for (int i = 0; i < len; i++)
197    {
198      objary[o_begin + i] = souary[s_begin + i];
199    }
200  }
201}

  UpdFile.java:这个类本来是想作为对象直接在服务端和客户端之间传递的,但后来没有采用,因此在本实现中用处不大

 1/** *//********************************************************************
 2 * 项目名称        :rochoc<p>
 3 * 包名称         :com.rochoc.autoupdate<p>
 4 * 文件名称        :UpdFile.java<p>
 5 * 编写者         :kfzx-luoc<p>
 6 * 编写日期        :2008-12-23<p>
 7 * 程序功能(类)描述  :<p>
 8 * 版本文件对像
 9 * 程序变更日期      :
10 * 变更作者        :
11 * 变更说明        :
12********************************************************************/
13package com.rochoc.autoupdate;
14
15import java.io.Serializable;
16
17/** *//**
18 * @author kfzx-luoc
19 *
20 * TODO To change the template for this generated type comment go to
21 * Window - Preferences - Java - Code Style - Code Templates
22 */
23public class UpdFile implements Serializable
24{
25  private String name = "";//名称
26  private String path = "";//路径
27  private int type = 0;//类型 0.文件 1.目录
28  private String version = "";//版本号
29  
30  public UpdFile()
31  {
32    super();
33  }
34  public UpdFile(String name)
35  {
36    this();
37    this.name = name;
38  }
39  public UpdFile(String name,String path,int type,String version)
40  {
41    this(name);
42    this.path = path;
43    this.type = type;
44    this.version = version;
45  }
46  /** *//**
47   * @return Returns the name.
48   */
49  public String getName()
50  {
51    return name;
52  }
53  /** *//**
54   * @param name The name to set.
55   */
56  public void setName(String name)
57  {
58    this.name = name;
59  }
60  /** *//**
61   * @return Returns the path.
62   */
63  public String getPath()
64  {
65    return path;
66  }
67  /** *//**
68   * @param path The path to set.
69   */
70  public void setPath(String path)
71  {
72    this.path = path;
73  }
74  /** *//**
75   * @return Returns the type.
76   */
77  public int getType()
78  {
79    return type;
80  }
81  /** *//**
82   * @param type The type to set.
83   */
84  public void setType(int type)
85  {
86    this.type = type;
87  }
88  /** *//**
89   * @return Returns the version.
90   */
91  public String getVersion()
92  {
93    return version;
94  }
95  /** *//**
96   * @param version The version to set.
97   */
98  public void setVersion(String version)
99  {
100    this.version = version;
101  }
102  public String toString()
103  {
104    return "Name:"+getName()+",Path:"+getPath()
105    +",Type:"+getType()+",Version:"+getVersion();
106  }
107}