在一段时间间隔(月)之后,我想删除包含内容的子文件夹。有人可以帮助我实现这一目标。以下代码显示了与Iterator相关的错误。
// Create a ref for closure
def dir
def yesterday = ( new Date() ).time - 1000*60*60*24
//definition Closure
dir = {
while(it.hasNext()){
it.eachDirRecurse( dir )
println("Dir: " + it.canonicalPath)
if(it.lastModified() <= yesterday)
it.deleteDir()
}
}
// Apply closure
dir( new File("H:\\soapUI\\Adres\\") )
这是例外:
Caught: groovy.lang.MissingMethodException: No signature of method: java.io.File.hasNext() is applicable for argument types: () values: []
Possible solutions: inspect(), getText(), getText(java.lang.String), setText(java.lang.String), setText(java.lang.String, java.lang.String), hashCode()\
at test$_run_closure1.doCall(test.groovy:8)
at test.run(test.groovy:19)
答案 0 :(得分:2)
您的代码中至少有几个错误......
it.hasNext()
it.eachDirRecurse
,它将递归整个树,但你再为该树中的每个目录再次调用它...... 你也会遇到问题,因为你会删除一个目录,但是eachDirRecurse
仍然会尝试走进那个目录并抛出一个FileNotFoundException
我认为你不得不使用eachDirRecurse
假设你使用的是Groovy 1.8(你没说),你可以这样做:
import groovy.time.TimeCategory
import static groovy.io.FileType.*
def yesterday = use( TimeCategory ) { new Date() - 1.day }
def deleteFoldersIn = { File f ->
f.traverse( [ type:DIRECTORIES, postDir:{ d -> if( d.lastModified() < yesterday.time ) d.deleteDir() } ] ) {
println "Scanning $it"
}
}
// Apply closure
deleteFoldersIn( new File( 'H:\\soapUI\\Adres\\' ) )
的文档
答案 1 :(得分:0)
new File('dir')。deleteVir()在groovy 1.8中递归给我
饮料中有魔力!
答案 2 :(得分:0)
否则您可以使用dir和deleteDir功能。
DeleteDir:递归删除当前目录及其内容。将不会遵循符号链接和联结,但将被删除。要删除工作空间的特定目录,请在dir步骤中包装deleteDir步骤。
dir('directoryToDelete') {
deleteDir()
}