2011-06-21 12 views
1

一定の時間間隔(月)が経過した後、コンテンツを含むサブフォルダを削除します。誰かがこれを達成するのを助けることができますか?次のコードは、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

がスローされます

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\\')) 

ここTimeCategoryのドキュメントは、です:あなたと仮定するとeachDirRecurse

は、あなたがこのような何かを行うことができます(あなたが言っていない)のGroovy 1.8でありますとFile.traverse()

+0

あなたが私を助けるために取る明確な説明、努力および時間のためにThnxはたくさんあります。ジュニアプログラマーとして、私はあなたのような人々から多くを学ぶことができます。確かに私はこれを実装します。 – makhlo

0

新しいファイル( 'DIR')。deleteDirは()飲み物で魔法があるのグルーヴィー1.8

に私のために再帰的です!

0

それ以外の場合は、dirおよびdeleteDir機能を使用できます。

DeleteDir:現在のディレクトリとその内容を再帰的に削除します。シンボリックリンクとジャンクションは追跡されませんが、削除されます。作業領域の特定のディレクトリを削除するには、dirステップでdeleteDirステップをラップします。

dir('directoryToDelete') { 
    deleteDir() 
} 
関連する問題