如何使用骆驼删除早于几天的文件夹
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();
我想轮询一个目录并删除超过指定时间的文件和文件夹。我写了以下代码:-
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();