Grails / Groovy удаление файла - PullRequest
1 голос
/ 16 июня 2011

У меня проблемы с удалением файла. Я покажу вам, что работает, и вы можете быть судьей, если это приемлемо.

class StupidService{
def doThings(){
  def tmpDirString = "dumpit"
  def currentDir = new File("../${tempDirString}")
  currentDir.eachFile(FileType.FILES){
    def f=it
    def answer = SuperComplicatedService.doStuff(f)
    //this works, now I need to move the file to the "done" folder
    File dir = new File("../${tempDirString}/done");  
    def endupFile = new File("../${tempDirString}/done/${f.name}")
    FileUtils.copyFile(f, endupFile)
    //this works; the file is copied to where I want it successfully; now I just need to delete the initial file.
    def thisIsAJoke=0
    while(f.delete()==false){
      println "This is not a joke: ${thisIsAJoke}"
      thisIsAJoke++
    }

  }
}
}

И это выводит от 40 до 150 тыс. Строк «Это не шутка: 64457» и т. Д., А затем, наконец, удаляет файл.

Что происходит?

Ответы [ 2 ]

3 голосов
/ 16 июня 2011

Что делает SuperComplicatedService.doStuff(f)?Если он открывает файл, убедитесь, что он закрывает его, прежде чем вернуться.В противном случае вы не сможете удалить файл, пока сборщик мусора не соберет объект, который на него ссылается.

См. Я не могу удалить файл в java

2 голосов
/ 16 августа 2014

Код для удаления файла и папки с файлом в Groovy / Grails

    String filePath = "c:/dir"+"/"+"carpeta"+"/"+documentoInstance.nombreArchivo
    String folderPath = "c:/dir"+"/"+"carpeta"+"/"
    boolean fileSuccessfullyDeleted =  new File(filePath).delete()
    boolean folderSuccessDeleted = new File(folderPath).deleteDir()
    if(fileSuccessfullyDeleted && folderSuccessDeleted){
        documentoInstance.delete flush:true
    }
    else{
        flash.error = "Archivo no borrado."
        return
    }
...