接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結構軟件自動升級實現》已經全部寫完,這是本人原創,如果需要轉貼請注明出處,謝謝。