|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
安装程序的工作:将源文件复制到相应的目录。 升级程序的工作:将源文件中更新过的文件覆盖目的文件,增加的文件复制到相应的目录。 卸载程序的工作:将程序文件夹的内容删除。 针对以上内容,写一个简朴的安装程序 (主要文件: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; } } 返回类别: 教程 上一教程: Mini Java编译器(一) 下一教程: java初学者必读-经验总结 您可以阅读与"程序安装,升级及卸载核心部分(java编写)"相关的教程: · 利用JAVAMAIL API编写邮件发关程序 · 编写跨平台Java程序注重事项 · 编写一个JAVA小程序取得IP地址 · Java中利用JMF编写摄像头拍照程序 · Java编写的计算器程序及源代码 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |