接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

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

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

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

《CS結構軟件自動升級實現》已經全部寫完,這是本人原創,如果需要轉貼請注明出處,目前我也只發布到bolgjava上,謝謝。