分享
 
 
 

程序安装,升级及卸载核心部分(java编写)

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

安装程序的工作:将源文件复制到相应的目录。

升级程序的工作:将源文件中更新过的文件覆盖目的文件,增加的文件复制到相应的目录。

卸载程序的工作:将程序文件夹的内容删除。

针对以上内容,写一个简单的安装程序

(主要文件:InstallSheildImpl,用递归的方式进行了文件夹的遍历)

/***********************************************************************

* Module: InstallSheild.java

* Author: Administrator

* Created: 2004-12-13 22:37:53

* Purpose: 安装程序接口,用于统一调用方式。

***********************************************************************/

package org.heixue.test.install;

/**

* @author Administrator

*/

public interface InstallSheild {

public final static int INSTALL=1;

public final static int UPDATE=2;

public final static int UNINSTALL=3;

public void install(int type,String srcFold,String destFold) throws InstallException ;

}

/***********************************************************************

* Module: InstallSheildImpl.java

* Author: Administrator

* Created: 2004-12-13 22:48:20

* Purpose: 安装程序的实现

***********************************************************************/

package org.heixue.test.install;

import java.io.*;

//import org.heixue.util.Log;

import org.heixue.util.FileLog;

import org.heixue.util.file.FileCopy;

/**

* @author Administrator

*/

public class InstallSheildImpl implements InstallSheild {

private String srcFold=null;

private String destFold=null;

private FileLog log=null;

/**

*

*/

public InstallSheildImpl() {

}

/*

* @see org.heixue.test.update.InstallSheild#install(java.lang.String, java.lang.String, int)

*/

public void install(int type, String srcFold, String destFold) throws InstallException {

this.srcFold=srcFold;

this.destFold=destFold;

if(Config.getOut()!=null)

log=new FileLog(Config.getOut());

else

log=new FileLog(System.out);

if(destFold==null) throw new InstallException("您没有设置目的文件夹位置!");

switch(type){

case InstallSheild.INSTALL: if(srcFold==null) throw new InstallException("您没有设置源文件夹位置!");doInstall();break;

case InstallSheild.UPDATE: if(srcFold==null) throw new InstallException("您没有设置源文件夹位置!");doUpdate();break;

case InstallSheild.UNINSTALL:doUninstall();break;

default:throw new InstallException("没有这项操作!");

}

}

/**

* :

* #perpose: 安装程序,主要进行文件的拷贝.

*/

public void doInstall() throws InstallException{

if(srcFold==null) throw new InstallException("您没有设置源文件夹位置!");

if(destFold==null) throw new InstallException("您没有设置目的文件夹位置!");

File file1=new File(srcFold);

File file2=new File(destFold);

if(!file2.exists()) file2.mkdir();

installFiles("","");

}

private void installFiles(String src,String dest) throws InstallException{

File file1=new File(srcFold,src);

File file2=new File(destFold,dest);

if(file1.isFile()){

log.info(file2.getPath());

FileCopy.copyByFile(file1,file2);

}else if(file1.isDirectory()){

if(!file2.exists()) file2.mkdir();

log.info(file2.getPath());

File[] fs=file1.listFiles();

for(int i=0;i<fs.length;i++){

String strPath=fs[i].getPath().substring(srcFold.length()+1);

installFiles(strPath,strPath);

}

}else{

throw new InstallException("不存在该文件或目录!");

}

}

/**

* :

* #perpose: 升级程序,根据文件的创建日期进行判断更新

*/

public void doUpdate() throws InstallException{

if(srcFold==null) throw new InstallException("您没有设置源文件夹位置!");

if(destFold==null) throw new InstallException("您没有设置目的文件夹位置!");

File file1=new File(srcFold);

File file2=new File(destFold);

if(!file2.exists()) file2.mkdir();

updateFiles("","");

}

private void updateFiles(String src,String dest) throws InstallException{

File file1=new File(srcFold,src);

File file2=new File(destFold,dest);

if(file1.isFile()){

if(!file2.exists()||file1.lastModified()>file2.lastModified()){

log.info(file2.getPath());

FileCopy.copyByFile(file1,file2);

}

}else if(file1.isDirectory()){

if(!file2.exists()) file2.mkdir();

log.info(file2.getPath());

File[] fs=file1.listFiles();

for(int i=0;i<fs.length;i++){

String strPath=fs[i].getPath().substring(srcFold.length()+1);

updateFiles(strPath,strPath);

}

}else{

throw new InstallException("不存在该文件或目录!");

}

}

/**

* :

* #perpose: 卸载程序,将目的文件夹下所有文件删除

*/

public void doUninstall() throws InstallException{

if(destFold==null) throw new InstallException("您没有设置目的文件夹位置!");

deleteFiles("");

}

private void deleteFiles(String dest) throws InstallException{

File file1=new File(destFold,dest);

if(file1.isFile()){

file1.delete();

log.info(file1.getPath());

}else if(file1.isDirectory()){

File[] fs=file1.listFiles();

for(int i=0;i<fs.length;i++){

String strPath=fs[i].getPath().substring(srcFold.length()+1);

deleteFiles(strPath);

}

file1.delete();

log.info(file1.getPath());

}else{

throw new InstallException("不存在该文件或目录!");

}

}

public static void main(String[] args) throws InstallException{

InstallSheildImpl isi=new InstallSheildImpl();

isi.install(InstallSheild.INSTALL,"d:\\test","d:\\test2");

//isi.install(InstallSheild.UPDATE,"d:\\test","d:\\test2");

//isi.install(InstallSheild.UNINSTALL,"d:\\test","d:\\test2");

}

}

/***********************************************************************

* Module: Config.java

* Author: Administrator

* Created: 2004-12-14 10:24:06

* Purpose: 一些配置信息

***********************************************************************/

package org.heixue.test.install;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.OutputStream;

/**

* @author Administrator

*/

public class Config {

private static int installType=0;

private static String srcFold=null;

private static String destFold=null;

private static OutputStream out=null;

private static Config _config = null;

/**

*

*/

public void initialize(int type,String src,String dest,String logPath) throws FileNotFoundException {

if(logPath!=null)

out = new FileOutputStream(logPath);

initialize(type,src,dest,out);

}

/**

* @param type :安装类型

* @param src :源文件夹

* @param dest :目标文件夹

* @param o :日志流输出

*/

public void initialize(int type,String src,String dest,OutputStream o){

installType=type;

srcFold=src;

destFold=dest;

out=o;

}

/**

* @return:

* #perpose:

*/

public static String getDestFold() {

return destFold;

}

/**

* @return:

* #perpose:

*/

public static int getInstallType() {

return installType;

}

/**

* @return:

* #perpose:

*/

public static OutputStream getOut() {

return out;

}

/**

* @return:

* #perpose:

*/

public static String getSrcFold() {

return srcFold;

}

/**

* @return:

* #perpose:

*/

public static Config getInstance() {

if(_config==null)

_config = new Config();

return _config;

}

}

/***********************************************************************

* Module: InstallException.java

* Author: Administrator

* Created: 2004-12-13 22:53:25

* Purpose: 安装过程异常

***********************************************************************/

package org.heixue.test.install;

/**

* @author Administrator

*/

public class InstallException extends Exception {

/**

*

*/

public InstallException() {

super();

}

public InstallException(String reason) {

super(reason);

}

}

/***********************************************************************

* Module: Install.java

* Author: Administrator

* Created: 2004-12-14 10:53:28

* Purpose: 安装文件的类,输入参数:安装类型,源文件夹,目标文件夹,日志文件

***********************************************************************/

package org.heixue.test.install;

import java.io.FileNotFoundException;

/**

* @author Administrator

*/

public class Install {

/**

*

*/

public Install() {

super();

// TODO Auto-generated constructor stub

}

public static void main(String[] args) throws FileNotFoundException, InstallException{

int installType=0;

String srcFold=null;

String destFold=null;

String logPath=null;

if(args.length==4){

if(args[0].equals("install")){

installType=InstallSheild.INSTALL;

}else if(args[0].equals("update")){

installType=InstallSheild.UPDATE;

}else if(args[0].equals("uninstall")){

installType=InstallSheild.UNINSTALL;

}else{

}

srcFold=args[1];

destFold=args[2];

logPath=args[3];

if(logPath.equals("null"))

logPath=null;

Config.getInstance().initialize(installType,srcFold,destFold,logPath);

InstallSheild is = new InstallSheildImpl();

is.install(installType,srcFold,destFold);

}else{

System.out.println("command line:java Install Type srcFold destFold logPath");

System.out.println("eg:java Install install d:\\test d:\\test2 d:\\install.log");

}

}

}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

其下是两个工具类

/***********************************************************************

* Module: FileCopy.java

* Author: Administrator

* Created: 2004-12-6 22:20:15

* Purpose: 文件复制

***********************************************************************/

package org.heixue.util.file;

import java.io.*;

/**

* @author Administrator

*/

public class FileCopy {

/**

*

*/

public FileCopy() {

}

public static boolean copy(String src,String dest){

try{

//instance the File as file_in and file_out

java.io.File file_in=new java.io.File(src);

java.io.File file_out=new java.io.File(dest);

FileInputStream in1=new FileInputStream(file_in);

FileOutputStream out1=new FileOutputStream(file_out);

byte[] bytes=new byte[1024];

int c;

while((c=in1.read(bytes))!=-1)

out1.write(bytes,0,c);

in1.close();

out1.close();

return(true); //if success then return true

}

catch(Exception e)

{

System.out.println("Error!");

return(false); //if fail then return false

}

}

public static boolean copyByFile(File src,File dest){

try{

//instance the File as file_in and file_out

FileInputStream in1=new FileInputStream(src);

FileOutputStream out1=new FileOutputStream(dest);

byte[] bytes=new byte[1024];

int c;

while((c=in1.read(bytes))!=-1)

out1.write(bytes,0,c);

in1.close();

out1.close();

return(true); //if success then return true

}

catch(Exception e)

{

System.out.println(e.toString());

return(false); //if fail then return false

}

}

}

/***********************************************************************

* Module: FileLog.java

* Author: Administrator

* Created: 2004-12-6 22:20:15

* Purpose: 产生文件日志

***********************************************************************/

package org.heixue.util;

import java.io.FileNotFoundException;

import java.io.IOException;

/**

* @author heixue

*

*/

public class FileLog {

private String logFilePath="/usr/tomcat_log.txt";//"c:\\tomcat_log.txt"

java.io.OutputStream outputStream=null;

/**

*

*/

public FileLog() {

super();

}

/**

* @param stream:输出流

*/

public FileLog(java.io.OutputStream stream) {

outputStream=stream;

}

/**

* @param filepath:文件路径

*/

public FileLog(String filepath) {

super();

try {

outputStream= new java.io.FileOutputStream(filepath,true);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

public void error(String str){

java.util.Date date=new java.util.Date();

String time=(date.getYear()+1900)+"-"+(date.getMonth()+1)+"-"+date.getDate()+" "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();

str="error:"+time+"-->"+str+"\n";

if(outputStream!=null) try {

this.outputStream.write(str.getBytes());

this.outputStream.flush();

} catch (IOException e) {

e.printStackTrace();

}

}

public void info(String str){

java.util.Date date=new java.util.Date();

String time=(date.getYear()+1900)+"-"+(date.getMonth()+1)+"-"+date.getDate()+" "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();

str="info:"+time+"-->"+str+"\n";

if(outputStream!=null) try {

this.outputStream.write(str.getBytes());

this.outputStream.flush();

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

//FileLog fl=new FileLog();

//fl.setOutputStream(System.out);

//fl.error("error occours!逆势");

FileLog fl=new FileLog("c:/log.txt");

fl.error("error occours!逆势");

}

/**

* @return

*/

public String getLogFilePath() {

return logFilePath;

}

/**

* @param string

*/

public void setLogFilePath(String string) {

logFilePath = string;

}

/**

* @return

*/

public java.io.OutputStream getOutputStream() {

return outputStream;

}

/**

* @param stream

*/

public void setOutputStream(java.io.OutputStream stream) {

outputStream = stream;

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有