- 浏览: 886420 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (687)
- java (127)
- servlet (38)
- struts (16)
- spring (22)
- hibernate (40)
- javascript (58)
- jquery (18)
- tomcat (51)
- 设计模式 (6)
- EJB (13)
- jsp (3)
- oracle (29)
- RUP (2)
- ajax (3)
- java内存管理 (4)
- java线程 (12)
- socket (13)
- path (5)
- XML (10)
- swing (2)
- UML (1)
- JBPM (2)
- 开发笔记 (45)
- Note参考 (15)
- JAXB (4)
- Quartz (2)
- 乱码 (2)
- CSS (2)
- Exception (4)
- Tools (7)
- sqlserver (3)
- DWR (7)
- Struts2 (47)
- WebService (2)
- 问题解决收藏 (7)
- JBOSS (7)
- cache (10)
- easyUI (19)
- jQuery Plugin (11)
- FreeMarker (6)
- Eclipse (2)
- Compass (2)
- JPA (1)
- WebLogic (1)
- powerdesigner (1)
- mybatis (1)
最新评论
-
bugyun:
受教了,谢谢
java 正则表达式 过滤html标签 -
xiongxingxing_123:
学习了,感谢了
java 正则表达式 过滤html标签 -
wanmeinange:
那如果无状态的。对同一个任务并发控制怎么做?比如继承Quart ...
quartz中参数misfireThreshold的详解 -
fanjieshanghai:
...
XPath 元素及属性查找 -
tianhandigeng:
还是没明白
quartz中参数misfireThreshold的详解
前些天写了个小练习,定期备份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();
- }
- }
- }
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("备份监听未能成功启动");
- }
- }
- }
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("备份出现异常");
- }
- }
- }
发表评论
文章已被作者锁定,不允许评论。
-
操作系统的目标和作用
2012-07-05 23:46 1313操作系统的目标 目前存在着多种类型的OS,不同类型的OS ... -
利用(ffmpeg)生成视频缩略图(java)
2012-07-01 01:11 0对于上传视频生成缩略图使用的是ffmpeg进行生成的。 自己在 ... -
对Java多线程技术中所有方法的详细解析
2012-06-06 11:32 771一、run()和start() 这两个 ... -
java乱码
2012-06-06 11:33 958自从接触Java和JSP以来, ... -
学习apache commons-io类库中的文件清除器
2011-07-06 23:26 1424学习apache commons-io 1.4类库中的File ... -
java 正则表达式 过滤html标签
2011-05-24 15:10 5345前段时间开发的时候要读取一篇文章的简介内容(也就是前200个字 ... -
转---Eclipse中web-inf和meta-inf文件夹的信息
2011-05-24 13:08 1124Eclipse中web-inf和meta-inf ... -
logback与Log4J的区别
2011-05-17 23:34 1415Logback和log4j是非常相似 ... -
性能优化
2011-04-14 16:10 1161(1)jdbc性能优化 jdbc程序的性能主要由两个因素决定 ... -
JAVA的Random类(转)
2011-04-12 00:21 901Random类中实现的随机算法是伪随机,也就是有规则的随机。在 ... -
非阻塞的Socket链接
2011-04-10 21:59 886import java.io.IOException; ... -
创建临时文件
2011-04-10 21:55 1082package net.java2000.io; ... -
面向对象设计的基本原则
2011-04-07 10:28 1137摘自:http://soft6.com/tech/6/6501 ... -
proxool
2011-04-02 15:01 846属性列表说明: fatal-sql- ... -
当前Java软件开发中几种认识误区
2011-04-01 10:12 868越来越多人开始使用Java ... -
Java中查看一个方法被调用的层次(Reflection、StackTrace)
2011-04-01 00:53 2022package test; public class Mai ... -
反序列化时恢复transient字段
2011-03-30 13:20 1204我们知道将字段设置为transient,可以避免该自动被序列化 ... -
用socket连接服务器直接发送接收邮件
2011-03-22 17:22 1294首页 新闻 论坛 问答 博客 招聘 更多 ▼ 专栏 &l ... -
利用JavaMail收/发Gmail邮件(SSL)
2011-03-22 17:21 2378Gmail目前已经启用了POP3和SMTP服务,具体情况请看 ... -
Java 反射与内省
2011-03-14 22:08 1066一、java反射机制 JAVA反 ...
相关推荐
"基于ASP的北国药苑BBS数据库自动备份压缩文件 v2.0.zip" 这个标题表明我们正在处理一个特定版本(v2.0)的压缩文件,该文件的核心功能是为名为“北国药苑”的BBS论坛的数据库提供自动化备份服务。这个备份系统是用...
这个"ASP源码—北国药苑BBS数据库自动备份压缩文件 v2.0.zip"是一个基于ASP技术的论坛系统——北国药苑BBS的数据库自动备份解决方案的版本2.0。该程序能够定期、自动地对数据库进行备份,以防止数据丢失,确保网站...
1. 数据备份:在开发备份解决方案时,可以利用Ionic.Zip.dll将用户数据打包成ZIP文件进行备份,减少存储空间,同时方便传输。 2. 文件分发:在软件发布中,可以将多个文件压缩成一个ZIP包,便于用户下载和安装。 3...
3. 备份单个数据库:核心功能可能包括将一个完整的数据库转换为SQL文件。这个过程涉及查询MySQL的元数据,获取表结构和数据,然后将它们写入SQL脚本。 4. 表格选择与排除:类可能允许用户指定要备份或排除的特定...
【标题】"webweb.zip" 是一个压缩文件,通常用于存储和传输一组相关的Web资源。在Web开发领域,这样的文件可能包含HTML、CSS、JavaScript、图片和其他构成网站所需的各种元素。这种类型的压缩文件有助于减少文件大小...
对象存储将数据和元数据分离,使得数据更容易管理和备份。每个对象都有一个唯一的标识符,便于检索。 2. **高可用性**:MinIO支持多节点集群部署,可以实现自动故障切换,确保服务的连续性和数据的可靠性。这对于...
这对于需要处理大量文件上传、备份或者提供下载服务的Web应用来说,无疑是一个非常实用的工具。 总的来说,"php文件在线压缩程序类.zip"提供的这个资源,通过集成PHP内置的压缩功能,为开发者提供了一种高效、便捷...
SpringBoot Web 本地仓库m2.zip是一个用于备份和快速恢复Maven本地仓库的压缩文件。在软件开发过程中,特别是使用SpringBoot和Web技术栈时,Maven作为一个强大的构建工具,负责管理和下载项目依赖。M2是Maven默认的...
9. **软件更新**:软件开发者通常会发布更新为.zip文件,让用户下载后覆盖旧版本,以完成更新。 10. **归档和组织**:用户可以将多个相关文件打包成一个.zip文件,方便归档和整理。 若能提供关于"爱心啊.zip"文件...
在IT行业中,Web项目是构建基于互联网的应用程序的常见方式,而"web项目包.zip"很显然就是一个包含了Web项目所有必要组件的压缩文件。这个压缩包可能是为了方便传输、存储或者部署到服务器上运行。接下来,我们将...
这个库,通常简称为SharpZipLib,是由IC#Code开发团队创建的,它提供了对ZIP、GZip、BZip2、Tar和7-Zip等格式的支持,同时也包含了加密和解密的功能,使得开发者能够在自己的项目中实现文件的加解密压缩。...
“S3700_52P-V100R006C00.002.web.zip”是一个ZIP压缩文件,通常包含用于Web管理的各种组件,如HTML文件、JavaScript脚本、图像资源以及CSS样式文件。这些文件一起构成了华为交换机的Web管理界面,允许管理员通过...
"js压缩工具.zip"正是这样一个专为JS文件和文件夹压缩设计的桌面软件。 该工具简化了JS压缩过程,用户只需打开软件并直接拖拽文件夹进去,工具便会自动处理内部的所有JS文件,将它们压缩成"min.js"的形式。"min.js...
1. **下载与解压**:首先从官方渠道下载cwRsyncServer_4.1.0.zip并解压缩到目标目录。 2. **安装服务**:运行安装脚本,将cwRsyncServer注册为Windows服务。 3. **配置服务**:根据需求编辑配置文件(如rsyncd....
Ionic.Utils.Zip是一款基于.NET Framework的开源库,由Koogra开发,专为处理ZIP文件格式而设计。该库提供了一系列方便易用的API,允许开发者在.NET环境中进行高效的压缩和解压缩操作。本文将详细探讨其不同版本之间...
11.web.zip 代表扫描域名空间是否有web打包备份 = web.zip 12.#domain#.rar 代表当前扫描的域名 比如设置为 #domain#.rar 则实际扫描的是www.baidu.com.rar 13.#domain#.zip 代表当前扫描的域名 比如设置为 #...
【标题】"青龙.zip/青龙.zip/青龙.zip" 暗示这是一个压缩文件,可能包含了多个层级的子目录或文件,其中的核心文件或目录名为“青龙”。在IT行业中,这样的命名可能代表着一个项目、软件或者数据集的名字。在Java...
在IT领域,这类压缩文件经常被用作软件分发、备份数据或者分享大文件的方式。 【描述】"fusion2.zip" 的描述简单,没有提供具体的内容信息,可能意味着它是一个包含特定版本或更新的"Fusion"系列产品的集合。...
【标题】"新建 360压缩 ZIP 文件.zip_hb_zip" 暗示这是一个使用360压缩软件创建的ZIP格式的文件。ZIP是一种常见的文件归档和压缩格式,它允许用户将多个文件和文件夹打包成一个单一的文件,以便于存储、传输和分发。...
Java文件的压缩与解压缩是Java编程中一个实用且常见的技术,主要涉及到Java的I/O流和第三方库如Apache Commons Compress、Java内置的java.util.zip包等。本实践项目结合了源代码和相关论文,提供了深入理解这一主题...