如何使用骆驼删除早于几天的文件夹

How to delete folders that are older than some days using camel

我想轮询一个目录并删除超过指定时间的文件和文件夹。我写了以下代码:-

            from("file:input?filterFile=${date:file:yyyyMMddHHmm} <= ${date:now-240h:yyyyMMddHHmm}&delay=60000&delete=true")
            .log("The headers are ${headers}");

它适用于文件,旧文件已被删除,但这不适用于文件夹。谁能建议一种方法使其也适用于文件夹?

决定草案,例如,java决定

File directory = new File(dirWay);
if(directory.exists()){

File[] listFiles = directory.listFiles();           
long purgeTime = System.currentTimeMillis() - (daysBack * 24 * 60 * 60 * 1000);// how old

int  i = listFiles.length //for checking if directory is empty // you can use your logic for checking directory is empty or not

for(File listFile : listFiles) {
    if(listFile.lastModified() < purgeTime) {
      if(listFile.delete()) {
        i--;  //for checking if directory is empty // you can use your logic for checking directory is empty or not   
      }

    }
  }
}

if (i == 0) { // check if directory empty delete it. Because of all files older than 10yers then directory older too. // you can use your logic for checking directory is empty or not
  FileUtils.forceDelete(new File(dirWay));
}

public static void forceDelete(文件文件) 抛出 IOException

删除文件。如果文件是一个目录,删除它和所有子目录。 https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/FileUtils.html#forceDelete(java.io.File)

对于您可以使用的子目录,您可以尝试 http://www.instanceofjava.com/2018/02/java-8-delete-folder-and-subfolders.html 或类似的东西

File directory = new File(dirWay);
if(directory.exists()){

File[] listFiles = directory.listFiles();           
long purgeTime = System.currentTimeMillis() - (daysBack * 24 * 60 * 60 * 1000);

for(File listFile : listFiles) {
    if(listFile.lastModified() < purgeTime) {
      FileUtils.forceDelete(new File(listFile.getPath())); // or your way to delete
    }
  }
}

public static void forceDelete(文件文件) 抛出 IOException

删除文件。如果文件是一个目录,删除它和所有子目录。 https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/FileUtils.html#forceDelete(java.io.File)

您可以编写一个处理器来在 java 中编写您的逻辑,因为 Apache camel 不适用于目录,您可以尝试下面的方法。

from("timer://myTimer?period=2000")
.process(new Processor() {

    public void process(Exchange exchange)
            throws Exception {
        System.out.println("Deleting Directories");
        File directory = new File("D:\basedirectory");
        removeDirectory(1, directory);
    }

    public void removeDirectory(int daysBack, File directory) {
        if(directory.exists()){
            final File[] listFiles = directory.listFiles();          
            final long purgeTime = 
                System.currentTimeMillis() - (daysBack * 24 * 60 * 60 * 1000);

            for(File listFile : listFiles) {
                if(listFile.lastModified() < purgeTime) {
                    System.out.println(listFile.getName() + " - deleted");
                    listFile.delete();
                }
            }
        } 
    }
})
.end();