程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> CS結構軟件自動升級實現(四)

CS結構軟件自動升級實現(四)

編輯:關於JAVA

接CS結構軟件自動升級實現(三) :

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 = ".\\config\\autoupdate.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}

《CS結構軟件自動升級實現》已經全部寫完,這是本人原創,如果需要轉貼請注明出處,謝謝。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved