您现在的位置: 主页 > 上位机技术 > JAVA > 程序安装,升级及卸载核心部分(java编写)
本文所属标签:
为本文创立个标签吧:

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

来源:网络整理 网络用户发布,如有版权联系网管删除 2018-07-23 

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

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

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

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

(主要文件: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;ibr /> 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;ibr /> 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;ibr /> 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;

}

}



              查看评论 回复



嵌入式交流网主页 > 上位机技术 > JAVA > 程序安装,升级及卸载核心部分(java编写)
 文件夹 文件 程序

"程序安装,升级及卸载核心部分(java编写)"的相关文章

网站地图

围观()