- 浏览: 404315 次
- 性别:
- 来自: 哈尔滨
最新评论
-
springdata_springmvc:
如何在java Web项目中开发WebService接口,地址 ...
JAVA6开发WebService (二)——JAX-WS例子 -
springdata-jpa:
如何在java Web项目中开发WebService接口,地址 ...
JAVA6开发WebService (三)——几个概念 -
springmvc-freemarker:
如何在java Web项目中开发WebService接口,地址 ...
JAVA6开发WebService (一) -
yuanfen2014:
[color=red][/color] 学习了
jdom解析xml -
di1984HIT:
我很喜欢你对设计模式的理解。
JAVA设计模式学习笔记5——模版方法模式(Template Method Pattern)
前些天写了个小练习,定期备份web工程,感觉有点意思,也有点小用处。由于最近封闭开发,下班比较晚,所以电脑一般不关机,省得麻烦,这样就可以一直开着我本机的web服务器,每天备份我的web工程了。备份可是个好东西,搞不好哪天程序出了点小问题,或者电脑出了点小故障,再或者一不小心按了个delete,备份可就大有用处了。
我最终要实现的功能是每天晚上 23:59:59 的时候将我的web工程压缩成一个以日期为后缀的 .zip 文件。
首先是写一个压缩 zip 文件的类,可以将一个或多个文件(或文件夹)压缩成zip文件。利用很多web容器都提供的ant.jar,可以很方便的压缩一个zip文件。网上有很多压缩zip的例子,不过有的例子压缩出的zip中,生成了一些多余的东西,下面是我的压缩zip文件的类:
package com.why.bak; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.tools.zip.ZipOutputStream; /** * 将一个或多个文件压缩成 .zip 格式 * @author 吴宏宇 2009-2-27 * */ public class ZipUtil { /** * 传入要压缩成的文件名,待压缩文件名或目录名,将待压缩文件或目录压缩成 .zip格式 * 如 要将 C 盘下 test 文件夹压缩成 test_bak.zip 文件,则执行 * zip("C:\\test_bak.zip","C:\\testzip"); * @param zipFileName 压缩后的文件名(包含全路径名) * @param inputFileName 待压缩文件名(包含全路径名) * @throws Exception */ public void zip(String zipFileName, String inputFileName) throws Exception { ZipOutputStream out = new ZipOutputStream(new FileOutputStream( zipFileName)); zip(out, new File(inputFileName), new File(inputFileName).getName()); // System.out.println("zip done"); out.close(); } /** * 传入要压缩成的文件名,待压缩文件名或目录名数组,将待压缩的多个文件或目录压缩成 .zip格式 * 如 要将 C 盘下 test 文件夹及 test.txt 文件压缩成 test_bak.zip 文件,则执行 * zip("C:\\test_bak.zip",new String[]{"C:\\test.txt", "C:\\test"}); * @param zipFileName * @param inputFileName * @throws Exception */ public static void zips(String zipFileName, String inputFileName[]) throws Exception { ZipOutputStream out = new ZipOutputStream(new FileOutputStream( zipFileName)); File file ; for(int i=0;i<inputFileName.length;i++){ file = new File(inputFileName[i]); zip(out, file, file.getName()); } // System.out.println("zip done"); out.close(); } public static void zip(ZipOutputStream out, File f, String base) throws Exception { if (f.isDirectory()) { File[] fl = f.listFiles(); String symbol = ""; if (System.getProperty("os.name").startsWith("Windows")) { symbol = "\\"; } else { symbol = "/"; } for (int i = 0; i < fl.length; i++) { zip(out, fl[i], base + symbol + fl[i].getName()); } } else { out.putNextEntry(new org.apache.tools.zip.ZipEntry(base)); FileInputStream in = new FileInputStream(f); int b; //System.out.println(base); while ((b = in.read()) != -1) { out.write(b); } in.close(); } } /** * @param args */ public static void main(String[] args) { String files[] = {"C:\\response.txt", "C:\\testzip测试","C:\\cmd.txt"}; try { zips("C:\\test测试zips.zip", files);zips("",new String[]{"C:\\response.txt", "C:\\testzip测试","C:\\cmd.txt"}); } catch (Exception e) { // TODO 自动生成 catch 块 e.printStackTrace(); } } }
第二步,实现在 web 工程启动后定期执行备份任务。
java.util.Timer 这个类有定时执行计划任务的功能,通过设定定时器的间隔时间,自动在此间隔时间后执行预先安排好的任务。
通过 timer.schedule(TimerTask,0,0)方法设置要执行的任务以及间隔时间。schedule方法的第一个参数是需要执行的任务,类型为java.util.TimerTask,第二个参数为执行任务前等待时间,若为0则表示不等待,第三个参数为间隔时间,单位为毫秒。
当web工程启动时,定时器开始计时,在整个web工程的生命周期里,会定期执行备份的任务,此处用Servlet的监听器类来启动定时器,通过在配置文件里配置此监听器, 让其在工程启动时自动加载运行,存活期为整个Web工程生命期。
package com.why.bak; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class BakListener implements ServletContextListener { private Timer timer = null; /** * 在Web应用结束时停止任务 */ public void contextDestroyed(ServletContextEvent arg0) { timer.cancel(); // 定时器销毁 } /** * 在Web应用启动时初始化任务 */ public void contextInitialized(ServletContextEvent arg0) { Date date = new Date(); //取得当前时间,精确到天 Date toNight ; SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { toNight = formatter2.parse(formatter1.format(date)+" 23:59:59"); System.out.println("toNight = "+formatter2.format(toNight)); timer = new Timer(true); //设置任务计划,启动和间隔时间 timer.schedule(new BakTask(), toNight, 86400000);//设置当前日期的23:59:59 开始执行 86400000毫秒为一天 } catch (ParseException e) { e.printStackTrace(); System.out.println("备份监听未能成功启动"); } } }
要使用这个监听器需要在 web.xml 中配置如下内容:
<listener> <listener-class>com.why.bak.BakListener</listener-class> </listener>
第三步,实现执行备份任务的类。
实现备份任务的类需继承 java.util.TimerTask ,在这个类中实现备份工程文件的功能。这里将要备份的文件名以及要生成的文件名写死在了程序里,其实可以写在配置文件中,通过读取配置文件制定要备份的内容。
package com.why.bak; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimerTask; public class BakTask extends TimerTask { public void run() { ZipUtil zipUtil = new ZipUtil(); String fileToBak = "E:\\obs_workspace\\OBSWeb_wuhy"; //要备份的文件名 String newFileName = "E:\\obs_workspace\\OBSWeb_why_bak\\OBSWeb_wuhy-bak-"; //要生成的.zip文件名 Date date = new Date(); //取得当前时间 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); try { newFileName = newFileName + formatter.format(date) +".zip"; System.out.println("newFileName = " + newFileName); zipUtil.zip(newFileName, fileToBak); } catch (Exception e) { e.printStackTrace(); System.out.println("备份出现异常"); } } }
发表评论
-
CKFinder2.x 入门 二
2011-07-08 17:28 11279破解 CKFinder是收费的,可是我们都比较 ... -
CKFinder2.x 入门
2011-07-08 16:04 6370CKFinder是一款强大的基于浏览器的ajax文件管 ... -
jxl 操作 Excel
2011-06-09 12:06 9680java 操作 Excel 最常用的就是JXL(jav ... -
CKEditor 3.6 入门二
2011-05-23 18:11 5477配置CKEditor ... -
CKEditor 3.6 入门
2011-05-20 11:28 8255有多种方法可以将CKEditor集成到你的页面中,下面是 ... -
JAVA6开发WebService (五)—— JAXB
2011-01-25 16:55 6935JAXB(Java API for XML Bindi ... -
多线程断点续传
2011-01-12 12:20 3733以前看过一个前辈写的断点续传的文章,记得当时没看懂,就 ... -
JAVA6开发WebService (四)——SAAJ调用WebService
2010-11-13 14:32 8538前面写了个JAX-WS的小例子,看到用JAVA6开发W ... -
JAVA6开发WebService (三)——几个概念
2010-11-11 17:00 18624要了解WebService,光能写 ... -
JAVA6开发WebService (二)——JAX-WS例子
2010-11-10 17:13 19729上一篇写了个最简单的小例子,只是为了说明JAVA6开发 ... -
JAVA6开发WebService (一)
2010-11-10 12:32 36002WebService ... -
InputStream、OutputStream、String的相互转换
2010-11-09 16:37 473881、字符串转inputStream String ... -
dom4j解析xml
2010-08-20 10:52 7274dom4j和jdom都是非常优秀的xml解析工具,但现 ... -
正则表达式
2010-05-17 16:39 1768先看一个用正则表达式校验Email的js方法 func ... -
Struts 1 和 Struts 2 的线程安全
2010-03-23 16:58 5689昨天人问我Struts 2是怎么保证全局变量的线程安全 ... -
oracle 字符串函数
2010-02-22 10:59 25891.LOWER 返回字符串的小写形式;select lower ... -
JAVA 集合类
2010-01-06 16:41 1278Collection├List│├LinkedLi ... -
JAVA 线程学习笔记--同步
2009-12-30 16:37 1518为了确保可以在线程之间以受控方式共享数据,Java 语言提供了 ... -
JAVA 线程学习笔记
2009-12-30 16:26 2888创建线程有两种方法。 ... -
JAVA调用系统命令或可执行程序
2009-09-03 15:33 69632通过 java.lang.Runtime 类可以方便的 ...
相关推荐
11.web.zip 代表扫描域名空间是否有web打包备份 = web.zip 12.#domain#.rar 代表当前扫描的域名 比如设置为 #domain#.rar 则实际扫描的是www.baidu.com.rar 13.#domain#.zip 代表当前扫描的域名 比如设置为 #...
多备份企业文件云备份软件是一款电脑和服务器文件自动定时备份和恢复的数据保护软件,它能实现混合备份,既把数据备份在本地,也能将数据备份到云端;兼容windows、Linux等主流平台。 对比传统文件备份软件,多备份...
但由于他们的工作原理都是通过调用 RAR.exe 或 7Zip.exe 第三方压缩/解压程序进行 压缩/解压操作的,只要服务器的安全设置设得比较好,Web程序就无法调用 RAR.exe 等程序而不能使用,所以通用性不强,大部分的虚拟...
phpMyBackupPro是一个易于使用,基于web的MySQL备份系统。 phpMyBackupPro备份系统 2.4 更新日志: PHP 5的支持(如额日格/ eregi的/ etc废弃的方法去除),升级到pclzip2.8.2,改变了所有的通讯和文件格式为...
MxsDoc是基于Web的文件管理系统,支持权限管理、历史版本管理、Office编辑、Office预览、在线解压缩、文件分享、文件加密、远程存储、跨仓库推送、跨服务器推送、秒传、断点续传、智能搜索、文件备注、本地自动备份...
文件压缩解压缩包 Commons Compress.rar 日历同步统计 GCALDaemon.zip 物业管理系统毕业设计+源码.rar 用iText类库制作PDF文档.rar 用JAVA做的聊天软件,有安装程序和源代码.rar 用java写的SFTP代码.rar 用Java加密...
phpMyBackupPro是一个易于使用,基于web的MySQL备份系统。 phpMyBackupPro 2.4 更新日志: PHP 5的支持(如额日格/ eregi的/ etc废弃的方法去除),升级到pclzip2.8.2,改变了所有的通讯和文件格式为UTF-8,改进...
能够高效的批量管理手机本地文件和应用程序,并提供无比强大的远程 WEB 桌面和FTP 等高级服务功能,不用USB数据线和安装PC手机助手就能够在电脑上查看、管理和备份手机的文件、短信、通讯录等等。更多精彩体验,等你...
MxsDoc是基于Web的文件管理系统,支持权限管理、历史版本管理、Office编辑、Office预览、在线解压缩、文件分享、文件加密、远程存储、跨仓库推送、跨服务器推送、秒传、断点续传、智能搜索、文件备注、本地自动备份...
MxsDoc是基于Web的文件管理系统,支持权限管理、历史版本管理、Office预览/编辑、WPS预览/编辑、在线解压缩、文件分享、文件加密、远程存储、远程文件推送、秒传、断点续传、智能搜索、文件备注、自动备份、一键迁移...
压缩文档浏览(.zip,.tar.gz,.jar, …),解压,压缩 文本及图像(.jpg,.png,.gif)快速浏览 文件本地和Web搜索 自动重连和anti-idle 命令控制 SSL/TSL加密传输 多线程传输 FXP传输 内置Serve服务器端软件,但需要你电脑...
前台用户登录后可实现类似windows资源管理器的目录创建、删除和移动,文件上传、下载及文件列表查看,图片预览及多媒体文件在线播放(需安装多媒体播放器),文件剪切、复制、粘贴、改名、删除、注释、导航、压缩、...
MxsDoc是基于Web的文件管理系统,支持权限管理、历史版本管理、Office编辑、Office预览、在线解压缩、文件分享、文件加密、远程存储、跨仓库推送、跨服务器推送、秒传、断点续传、智能搜索、文件备注、本地自动备份...
MxsDoc是基于Web的文件管理系统,支持权限管理、历史版本管理、Office编辑、Office预览、在线解压缩、文件分享、文件加密、远程存储、跨仓库推送、跨服务器推送、秒传、断点续传、智能搜索、文件备注、本地自动备份...
MxsDoc是基于Web的文件管理系统,支持权限管理、历史版本管理、Office编辑、Office预览、在线解压缩、文件分享、文件加密、远程存储、跨仓库推送、跨服务器推送、秒传、断点续传、智能搜索、文件备注、本地自动备份...
MxsDoc是基于Web的文件管理系统,支持权限管理、历史版本管理、Office编辑、Office预览、在线解压缩、文件分享、文件加密、远程存储、跨仓库推送、跨服务器推送、秒传、断点续传、智能搜索、文件备注、本地自动备份...
MxsDoc是基于Web的文件管理系统,支持权限管理、历史版本管理、Office编辑、Office预览、在线解压缩、文件分享、文件加密、远程存储、跨仓库推送、跨服务器推送、秒传、断点续传、智能搜索、文件备注、本地自动备份...
MxsDoc是基于Web的文件管理系统,支持权限管理、历史版本管理、Office编辑、Office预览、在线解压缩、文件分享、文件加密、远程存储、跨仓库推送、跨服务器推送、秒传、断点续传、智能搜索、文件备注、本地自动备份...
MxsDoc是基于Web的文件管理系统,支持权限管理、历史版本管理、Office编辑、Office预览、在线解压缩、文件分享、文件加密、远程存储、跨仓库推送、跨服务器推送、秒传、断点续传、智能搜索、文件备注、本地自动备份...