CS结构软件自动升级实现(四)
接 CS结构软件自动升级实现(三) :
Config.java处理配置文件:
UpdFile.java:这个类本来是想作为对象直接在服务端和客户端之间传递的,但后来没有采用,因此在本实现中用处不大
《CS结构软件自动升级实现》已经全部写完,这是本人原创,如果需要转贴请注明出处,目前我也只发布到bolgjava上,谢谢。
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********************************************************************/
13 package com.rochoc.autoupdate;
14
15 import java.io.File;
16 import java.text.SimpleDateFormat;
17 import java.util.Date;
18 import java.util.List;
19
20 import org.dom4j.Document;
21 import org.dom4j.Element;
22 import 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 */
31 public 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}
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********************************************************************/
13 package com.rochoc.autoupdate;
14
15 import java.io.File;
16 import java.text.SimpleDateFormat;
17 import java.util.Date;
18 import java.util.List;
19
20 import org.dom4j.Document;
21 import org.dom4j.Element;
22 import 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 */
31 public 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********************************************************************/
13 package com.rochoc.autoupdate;
14
15 import 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 */
23 public 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}
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********************************************************************/
13 package com.rochoc.autoupdate;
14
15 import 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 */
23 public 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结构软件自动升级实现》已经全部写完,这是本人原创,如果需要转贴请注明出处,目前我也只发布到bolgjava上,谢谢。