接 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 ********************************************************************/ 
 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 } 
《CS结构软件自动升级实现》已经全部写完,这是本人原创,如果需要转贴请注明出处,目前我也只发布到bolgjava上,谢谢。  
	 
	
	
 
 
				
 |