原文:http://www.blogjava.net/rochoc/archive/2009/01/09/250741.html
Config.java处理配置文件:
/** *//********************************************************************
* 项目名称 :rochoc<p>
* 包名称 :com.rochoc.autoupdate<p>
* 文件名称 :Config.java<p>
* 编写者 :kfzx-luoc<p>
* 编写日期 :2008-12-22<p>
* 程序功能(类)描述 :<p>
* 用于更新的配置文件读取对像
* 程序变更日期 :
* 变更作者 :
* 变更说明 :
********************************************************************/
package com.rochoc.autoupdate;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/** *//**
* @author kfzx-luoc
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Config
{
public static String cfgFile = ".\\config\\autoupdate.xml";
private static Config config = null;
/** *//** xml的document*/
private Document doc = null;
public static Config getInstance()
{
if(config==null)
{
config = new Config();
}
return config;
}
private Config()
{
try
{
SAXReader reader = new SAXReader();
doc = reader.read(cfgFile);
}catch(Exception e)
{
e.printStackTrace();
}
}
public void refresh()
{
config = new Config();
}
public String getVerstion()
{
if(config==null)
{
return "";
}
List lst = doc.selectNodes("Info/Version");
Element el = (Element)lst.get(0);
return el.getText();
}
public String getServerIp()
{
if(config==null)
{
return "";
}
List lst = doc.selectNodes("Info/UpdateServer/Ip");
Element el = (Element)lst.get(0);
return el.getText();
}
public UpdFile [] getFiles()
{
if(config==null)
{
return null;
}
List file = doc.selectNodes("Info/Files");
List lst = ((Element)file.get(0)).elements();
if(lst.size()==0)
{
return null;
}
UpdFile files[] = new UpdFile[lst.size()];
for(int i=0;i<lst.size();i++)
{
Element el = (Element)lst.get(i);
List childs = el.elements();
Element name = (Element)childs.get(0);//Name
Element path = (Element)childs.get(1);//Path
Element ver = (Element)childs.get(2);//Version
files[i] = new UpdFile(name.getText());
if("File".equals(el.getName()))
{
files[i].setType(0);//文件
}else
{
files[i].setType(1);//目录
}
files[i].setPath(path.getText());
files[i].setVersion(ver.getText());
}
return files;
}
public String getServerPort()
{
if(config==null)
{
return "";
}
List lst = doc.selectNodes("Info/UpdateServer/Port");
Element el = (Element)lst.get(0);
return el.getText();
}
public static void print(String msg)
{
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss->>" );
String str = sdf.format( new Date());
System.out.println(str+msg);
}
public static void main(String args[])
{
Config cfg = Config.getInstance();
UpdFile files[] = cfg.getFiles();
for(int i=0;i<files.length;i++)
{
System.out.println(files[i]);
}
Config.print("test");
}
/** *//**
* 格式化路径,增加其尾部的目录分隔符
*
* @param p 要格式化的目录字符串
*/
public static String formatPath(String p)
{
if (!p.endsWith(File.separator))
return (p + File.separator);
return p;
}
/** *//**
* 格式化路径,去除其尾部的目录分隔符
*
* @param p 要格式化的目录字符串
*/
public static String unformatPath(String p)
{
if (p.endsWith(File.separator))
return (p.substring(0, p.length()-1));
return p;
}
public static byte[] getCmd(String cmd)
{
//第一位用于标识是命令,后面8位为命令名
byte cmdb [] = new byte[9];
cmdb[0] = AUPD.CMD_DATA_SECT;
byte [] tmp = cmd.getBytes();
if(tmp.length!=8)
{
Config.print("命令有误:"+cmd+"<<");
return null;
}
for(int i=0;i<8;i++)
{
cmdb[i+1] = tmp[i];
}
return cmdb;
}
public static String parseCmd(byte cmd[])
{
return new String(cmd,0,8);
}
public static byte [] getLen(int len)
{
String slen = String.valueOf(len);
while(slen.length()<4)
{
slen = "0"+slen;
}
return slen.getBytes();
}
public static void copyArray(byte objary[], byte souary[], int o_begin,
int s_begin, int len)
{
for (int i = 0; i < len; i++)
{
objary[o_begin + i] = souary[s_begin + i];
}
}
}
UpdFile.java:这个类本来是想作为对象直接在服务端和客户端之间传递的,但后来没有采用,因此在本实现中用处不大
/** *//********************************************************************
* 项目名称 :rochoc<p>
* 包名称 :com.rochoc.autoupdate<p>
* 文件名称 :UpdFile.java<p>
* 编写者 :kfzx-luoc<p>
* 编写日期 :2008-12-23<p>
* 程序功能(类)描述 :<p>
* 版本文件对像
* 程序变更日期 :
* 变更作者 :
* 变更说明 :
********************************************************************/
package com.rochoc.autoupdate;
import java.io.Serializable;
/** *//**
* @author kfzx-luoc
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class UpdFile implements Serializable
{
private String name = "";//名称
private String path = "";//路径
private int type = 0;//类型 0.文件 1.目录
private String version = "";//版本号
public UpdFile()
{
super();
}
public UpdFile(String name)
{
this();
this.name = name;
}
public UpdFile(String name,String path,int type,String version)
{
this(name);
this.path = path;
this.type = type;
this.version = version;
}
/** *//**
* @return Returns the name.
*/
public String getName()
{
return name;
}
/** *//**
* @param name The name to set.
*/
public void setName(String name)
{
this.name = name;
}
/** *//**
* @return Returns the path.
*/
public String getPath()
{
return path;
}
/** *//**
* @param path The path to set.
*/
public void setPath(String path)
{
this.path = path;
}
/** *//**
* @return Returns the type.
*/
public int getType()
{
return type;
}
/** *//**
* @param type The type to set.
*/
public void setType(int type)
{
this.type = type;
}
/** *//**
* @return Returns the version.
*/
public String getVersion()
{
return version;
}
/** *//**
* @param version The version to set.
*/
public void setVersion(String version)
{
this.version = version;
}
public String toString()
{
return "Name:"+getName()+",Path:"+getPath()
+",Type:"+getType()+",Version:"+getVersion();
}
}
《CS结构软件自动升级实现》已经全部写完
分享到:
相关推荐
CS结构自动升级模块是软件开发中的一个重要组成部分,尤其是在桌面应用(Client-Server,简称CS结构)中。VB.NET是一种流行的编程语言,常用于构建这样的应用程序。这个模块的主要目的是确保用户始终运行的是最新...
以上是对基于CS模式客户端软件自动升级实现的全面解析,涵盖了从检测更新到安全验证,再到实际升级和用户体验的各个环节。通过理解并应用这些知识点,开发者可以构建出高效、可靠的自动升级系统,为用户提供无缝的...
【C#实现CS模式下软件自动在线升级】 在C/S(Client/Server)架构的软件中,维护性和升级便利性一直是开发者面临的重要挑战。传统的手动升级方式效率低下,且随着软件规模的扩大,升级成本逐渐增加。为了解决这一...
【C#实现CS模式下软件自动在线升级】 在C/S(Client/Server)模式的应用程序中,由于客户端软件需要在用户设备上安装,因此维护和升级通常是一项挑战。手动升级不仅耗时,而且可能导致用户数据丢失或软件版本不一致...
在C/S(客户端/服务器)模式下,软件自动在线升级是一项...总之,实现C/S模式下的软件自动在线升级涉及网络请求、XML解析、文件下载和安装等多个步骤。通过合理的代码组织和错误处理,可以为用户提供无缝的更新体验。
【cs系统在线升级】是指在Client/Server(C/S)架构的软件中实现自动在线更新的能力。C/S模式的软件在维护、部署和升级方面存在挑战,导致一些企业倾向于选择Browser/Server(B/S)结构。然而,对于那些必须采用C/S模式...
在Java CS SWT RCP中实现在线升级和自动更新,通常涉及以下几个关键知识点: 1. **SWT**:SWT是Java中的一个图形用户界面(GUI)库,它是Java AWT和Swing的替代品,提供了与操作系统更紧密的集成,提供了更丰富的...
综上所述,"ASP.NET基于CS结构的企业人事管理系统"的实现涉及了软件工程的多个方面,包括需求分析、设计、编码、测试和维护。开发者需要掌握ASP.NET框架、.NET Framework、数据库设计以及客户端和服务器端编程等多个...
在IT行业中,Windows Forms(通常简称为WinForms)是一种基于.NET Framework的用户界面开发平台,用于构建桌面应用程序。它提供了一种直观的方式...这样的程序能为用户提供无缝的升级体验,提高软件的可靠性和满意度。
总的来说,ASP.NET基于CS结构的企业人事管理系统设计与实现是一个涵盖了多个IT领域的综合项目,涉及软件工程方法、数据库设计、Web开发技术、用户体验优化以及安全性等多个方面。通过这个项目,开发者不仅能提升技术...
在.NET框架下,C#开发的WinForm应用程序可以利用各种技术实现自动升级功能,以便用户无需手动下载安装新版本。本示例“c# winfrom自动升级,完整源代码例子 fw2.0”提供了一个简单易懂的方法,适用于C# WinForm应用...
总结,这种基于CS结构的织物疵点检测信息管理系统利用先进的信息技术,实现了纺织生产中的自动化疵点检测和信息管理,对提升产品质量、优化生产流程具有重要意义。同时,系统的设计和实施充分考虑了行业特性、用户...
- **软件资产共用**:无论是CS1还是CJ1系列,它们之间可以共享支持软件及程序代码,简化了维护与升级过程。 - **模块通用性**:CS系列的各种I/O模块可在CS1D双工系统中通用,这不仅简化了系统的维护工作,也降低了...
总结,基于CS结构的图书销售系统通过VS2008和ACCESS的结合,实现了图书行业的高效管理。系统的每个模块都紧密围绕着图书销售的核心业务,旨在通过信息化手段提升整体运营效率,同时也为未来的扩展和升级留有空间。...
《基于CS结构的仓库智能管理系统》是一篇关于利用面向对象技术设计和开发仓库管理软件的毕业论文。本文主要探讨了如何运用C/S(客户端/服务器)架构构建一个智能化的仓库管理系统,涵盖了系统从构思到实际应用的全...
10. **升级与扩展**:横河CS1000系统设计时考虑到了未来扩展的可能性,允许用户根据需要添加新的硬件和软件模块。 压缩包内的"S1B3001"可能代表一个特定的系统部分或者项目编号,具体的内容可能涉及该部分的详细...
自动升级工具的核心功能是检查服务器上的新版本,并在发现更新时下载并安装。`AppUpdater.cs` 文件很可能是实现这一功能的关键类。它可能包含了检查更新、下载文件、安装更新等逻辑。 3. **XML 文件处理**: `Xml...
【C/S结构的在线考试系统】是一种传统的客户端-服务器(Client/Server,简称C/S)架构的软件应用,尤其在教育信息化领域中被广泛应用。在这个系统中,客户端(通常是用户计算机上的应用程序)与服务器端(负责数据...
基于体系结构的软件开发模型,如基于构件的开发模型和基于体系结构的开发模型,强调以软件体系结构为核心,以构件为基础,通过迭代增量方式进行设计和实现。这种模型的优势在于提高了软件开发效率,通过构件复用简化...