import groovy.xml.MarkupBuilder
import java.text.SimpleDateFormat
/**
* 根据xml文件中的timeType是决定interval是什么单位的时间间隔。
* 从当前时间算起,此时间间隔内的文件就拷贝。
* @author UC181129
*
*/
public class StartProgram {
static main(agrs) {
def dir = 'C:\\usr\\workspace\\TestCopyFiles\\Property.xml'
def conf = new XmlParser().parse(dir)
def unit = 0L // the unit for interval
def timeUnit = conf.attribute('timeUnit')
def time = conf.attribute('interval').toLong()
switch(timeUnit) {
case 'day': unit = 1000 * 60 * 60 * 24; break
case 'hour': unit = 1000 * 60 * 60; break
case 'min': unit = 1000 * 60; break
case 'second': unit = 1000; break
default: unit = 1000; break
}
time = unit * time
def runTask = {src, interval ->
new Timer().schedule(new CopyFileByTimeStamp(src), new Date(), interval);
}
runTask(dir, time)
}
}
/**
* 大于配置文件中时间戳的文件都会被拷贝,复制过的不用再次复制
* 配置文件中的时间间隔为程序启动的时间间隔
* @author UC181129
*
*/
class CopyFileByTimeStamp extends TimerTask{
String dir
/**
* 构造函数
* @param path
*/
public CopyFileByTimeStamp(String path) {
this.dir = path
println 'program constracted'
}
/**
* 重写TimerTask的run()
*/
public void run() {
println 'programme start'
def params = new Params()
params.confDir = dir
getPropertyFile(params)
println 'programme stop ---------'
}
/**
* 读取配置文件信息
* @param params Params类型,里面存放所有用到的参数
* @return
*/
def static getPropertyFile(Params params) {
def conf = new XmlParser().parse(params.confDir)
params.lastFileConfDir = conf.attribute(params.LABEL_LASTFILECONFDIR)
params.timeType = conf.attribute(params.LABEL_TIMETYPE)
params.parseTime = new SimpleDateFormat(params.timeType)
params.timestamp = params.parseTime.parse(conf.attribute(params.LABEL_TIMESTAMP)) // convert to Date
if (!(new File(params.lastFileConfDir).exists())) {
writeToXML(params)
}
def LFTConf = new XmlParser().parse(params?.lastFileConfDir)
params.timestamp = params.parseTime.parse(LFTConf."$params.LABEL_TIMESTAMP".text())
conf.group.each {
copyFiles(it."$params.LABEL_SRC".text(), it."$params.LABEL_FGT".text(), params)
}
writeToXML(params)
}
/**
* 将最后处理的文件时间写入xml,如果刚开始没有没有该文件,则创建一个并以property.xml中信息为准
* @param params Params类型参数
* @return
*/
def static writeToXML(Params params) {
def file = new File(params?.lastFileConfDir)
// 如果有lastTime值,则比较大小,timestamp中记录日期最大的时间
if (params?.lastTime != null) {
def time = new Date(params.lastTime)
params.timestamp = (params.timestamp >= time)?params.timestamp:time
}
file.withWriter {
writer ->
new MarkupBuilder(writer).conf{
timestamp(params?.parseTime?.format(params?.timestamp))
timeType(params?.timeType)
}
}
}
/**
* 复制文件
* @param srcDir 源文件地址
* @param fgtDir 目标文件地址
* @param params Params类型参数
* @return
*/
def static copyFiles(srcDir, fgtDir, params) {
// if srcFiles not exit, return
def srcFiles = new File(srcDir)
if (!srcFiles.exists()) {
return
}
srcFiles.eachFile {
file ->
if (file.isFile() && isNewFile(file.lastModified(), params)) {
// if fgtDir not exit, create one
(new File(fgtDir)).mkdirs()
new File(fgtDir + File.separator + file.name).withWriter {
writer ->
file.eachLine {
line ->
writer.writeLine(line)
}
}
params.lastTime = (file.lastModified()>params.lastTime)?file.lastModified():params.lastTime
println 'copy ' + file.getCanonicalPath()
} else if (file.isDirectory()) {
copyFiles(srcDir + File.separator + file.name, fgtDir + File.separator + file.name, params)
}
}
}
/**
* 判断是否是需要传递的文件,以timestamp为标准,在该日期之后的返回TRUE,其他为FALSE
* @param fileTime 当前要判断的日期
* @param params Params类型参数
* @return
*/
static boolean isNewFile(fileTime, params) {
Date date = params.timestamp
Date dateFile = new Date(fileTime)
def result
if (date.compareTo(dateFile) >= 0) {
result = false
} else if(date.compareTo(dateFile) < 0) {
result = true
}
return result
}
}
/**
* 该类各属性为公共参数
* @author UC181129
*
*/
class Params {
final String LABEL_INTERVAL = 'interval' // xml中标签interval
final String LABEL_TIMESTAMP = 'timestamp' // xml中标签timestamp
final String LABEL_TIMETYPE = 'timeType' // xml中标签timeType
final String LABEL_LASTFILECONFDIR = 'lastFileConfDir' // xml中标签lastFileConfDir
final String LABEL_SRC = 'src' // xml中标签src
final String LABEL_FGT = 'fgt' // xml中标签fgt
def timestamp // 时间戳,进行文件是否拷贝的判断依据
def timeType // 时间戳类型,进行日期装换时的format
def lastTime // 记录复制过的文件的最大时间
def confDir // Property.xml 的绝对路径
def lastFileConfDir // LastFileTime.xml的绝对路径,该文件记录上一次拷贝文件后,记录的最大文件时间
def parseTime // 用来保持根据timeType生成的SimpleDateFormat对象,方便其他程序使用
def interval // 程序启动的时间间隔
}
分享到:
相关推荐
在Windows环境下,Groovy 2.3.6的安装文件`groovy-2.3.6-windows.exe`是一个可执行程序,用户可以通过简单的点击安装步骤来设置Groovy环境。安装完成后,系统路径会包含Groovy的bin目录,使得`groovysh`、`groovyc`...
springboot jpa 自动生成实体类的 文件 可以拿走直接用 Generate POJOs.groovy
groovy 创建xml,并生成xml文件的代码
1. **下载 GroovyEclipse.zip 文件**:访问 Groovy 的官方网站或 GitHub 仓库获取最新版本的 GroovyEclipse.zip 文件。确保选择与您的 Eclipse 版本兼容的插件版本。 2. **解压 GroovyEclipse.zip 文件**:将下载的...
这样,Eclipse就会识别到.Groovy文件,并能正确地提供代码提示和自动补全功能。通过这种方式,我们可以在微服务项目中充分利用Groovy的优势,同时避免了因直接使用.Groovy文件而导致的IDE兼容性问题。 总结来说,...
在"apache-groovy-binary-2.4.11.zip"这个压缩包中,用户可以找到Groovy 2.4.11的所有二进制文件,包括编译器、解释器和其他必要的库,使得开发者能够在本地环境中快速开始Groovy的开发工作。这个版本支持JVM(Java ...
apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望...
Groovy-3.0.7.msi文件将引导用户完成Groovy的安装过程,包括设置路径变量,这样系统就能识别Groovy命令行工具,如`groovysh`和`groovyConsole`。 在安装Groovy for Windows的过程中,用户可以选择自定义安装路径,...
Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以...
通过执行这个exe文件,用户可以在系统上快速配置好Groovy环境,包括设置PATH变量、安装Groovy解释器和相关工具。安装过程中,用户可以选择自定义安装路径,以便更好地管理开发环境。 安装Groovy后,开发者可以使用...
- **热部署**:当Groovy脚本更新时,无需重新编译或重启Java应用,只需更新数据库中的脚本,Java程序就能即时感知并执行新的逻辑。 - **灵活的业务逻辑**:业务规则可以根据需求快速调整,无需改变Java源码,降低...
Groovy还提供了重载操作符的能力,允许程序员为基本数据类型或自定义类型编写新的操作符行为。在字符串处理方面,Groovy引入了GString,这种字符串可以包含表达式,能够在运行时被评估。同时,Groovy还引入了对正则...
总结起来,EditPlus 3.12 540版结合Groovy语法文件,为Groovy开发者提供了一个强大的编码环境。虽然SN信息未给出,但了解如何配置和使用这些语法文件,对于提升开发体验有着显著的帮助。无论是修改代码高亮的颜色,...
包含翻译后的API文档:groovy-3.0.9-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.codehaus.groovy:groovy:3.0.9; 标签:groovy、codehaus、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用...
在“groovy-1.8.3”这个文件中,我们可以预见到它包含了Groovy 1.8.3版本的相关资料。这个版本可能包括了源码、文档、示例代码等,是学习和研究Groovy的好资源。通过对这些材料的学习,开发者可以了解Groovy的语法、...
重启后,你可以在Eclipse中创建新的Groovy项目,编辑Groovy源代码,并利用内置的Groovy编译器进行构建和调试。 Groovy Eclipse插件的特性包括: - **语法高亮**:提供Groovy语言的语法着色,使代码更易读。 - **...
将插件文件复制至此,MyEclipse在下次启动时会自动检测并安装新插件。 压缩包内的"使用方法.txt"文件通常包含了详细的安装步骤和注意事项,用户应仔细阅读以确保正确安装。此外,"features"和"plugins"两个子目录...
6. **bin目录下的脚本**:每个脚本都有相应的Windows批处理文件(.bat)和Unix/Linux shell脚本(.sh),确保在不同操作系统上都能正常工作。 Apache Groovy提供了一些独特的特性,例如: - **简洁的语法**:...
Windows版本的Groovy 2.4.13.exe安装文件,默认完整安装,也可根据需要自定义安装组件。本版本经过测试能够正常安装使用,支持添加到IDEA中。和JAVA类似的动态语言Groovy,在虚拟机中运行,Groovy脚本在运行时会先...