Как удалить папку после вызова FileUtils.saveAndUnzipToTempDir - PullRequest
2 голосов
/ 24 апреля 2019

Я использую FileUtils.saveAndUnzipToTempDir для распаковки папки / файлов во временный каталог, и я хочу удалить эту папку, как только я закончу просматривать папку.

У меня нет большого опыта Java, но я думаю, что процесс saveAndUnzipToTempDir еще не закончен, и не знаю, как ждать, пока процесс завершится, или как его убить:

Это мой код:

public boolean postFile(@RequestParam String filename, @RequestParam MultipartFile file) {

  FileResultsDTO fileResultsDTO = FileUtils.saveAndUnzipToTempDir(file, filename);

  for(String fileName : fileResultsDTO.getUnzipDir().list()){
     // do something.
  }

  //Find the temp folder where the other files/folders are uploaded and 
  //deleted those
  File directory = new File(FileUtils.getTempDirectoryPath());
  FileUtils.deleteDirectory(directory);
  FileUtils.forceDelete(directory);
  delete(directory);
}


public static void delete(File file)
    throws IOException {

    if(file.isDirectory()){

        //directory is empty, then delete it
        if(file.list().length==0){

            FileDeleteStrategy.FORCE.delete(file);
            FileUtils.deleteQuietly(file);
            file.delete();
            System.out.println("Directory is deleted : "
                + file.getAbsolutePath());

        }else{

            //list all the directory contents
            String files[] = file.list();

            for (String temp : files) {
                //construct the file structure
                File fileDelete = new File(file, temp);

                //recursive delete
                delete(fileDelete);
            }

            //check the directory again, if empty then delete it
            if(file.list().length==0){
                FileDeleteStrategy.FORCE.delete(file);
                FileUtils.deleteQuietly(file);
                file.delete();
                System.out.println("Directory is deleted : "
                    + file.getAbsolutePath());
            }
        }

    }else{
        //if file, then delete it
        FileDeleteStrategy.FORCE.delete(file);
        FileUtils.deleteQuietly(file);


        file.delete();
        System.out.println("File is deleted : " + file.getAbsolutePath());
    }
}

Итак, если вы внимательно посмотрите код, вы увидите, что я тоже пытался использовать:

 FileDeleteStrategy.FORCE.delete(file);
 FileUtils.deleteQuietly(file);
 file.delete();
...