根据清除时间保留最新的 n 个文件
Retain latest n files based on purge time
我试过如何根据天数保留文件。这就是这样做的逻辑。
public static void purgeFiles(int daysToRetain, String directory){
File backupDir = new File(directory);
long purgeTime = System.currentTimeMillis() - (daysToRetain * 24L * 60L * 60L * 1000L);
if(backupDir.exists()){
File[] listOfBackupFiles = backupDir.listFiles();
for(File backupFile : listOfBackupFiles){
if(backupFile.lastModified() < purgeTime){
if(backupFile.isFile()){
System.out.println(backupFile.getName()+" is going to delete");
backupFile.delete();
}
}
}
}
}
这里我有疑问,如何在一个目录中保留最新的10个文件。文件创建日期和时间不同。
创建文件没有固定的时间。文件不会每天、每周或每月创建。一个文件将在 2 天内创建,其他文件将在 5 天内创建。
所以,我想保留最近的 10 个文件。
Best way to list files in Java, sorted by Date Modified?
您可以使用比较器按修改日期对数组进行排序。
然后,只需检查数组是否大于 10,并对 10 之后的所有项目执行代码。
示例:
import java.io.File;
import java.util.Arrays;
import java.util.Comparator;
public class PurgeFiles
{
public static void main(String[] args)
{
purgeFiles(10, 10, "C:/testdir/");
}
public static void purgeFiles(int daysToRetain, int filesToRetain, String directory)
{
File backupDir = new File(directory);
long purgeTime = System.currentTimeMillis() - (daysToRetain * 24L * 60L * 60L * 1000L);
if (backupDir.exists())
{
File[] listOfBackupFiles = backupDir.listFiles();
Arrays.sort(listOfBackupFiles, new Comparator<File>()
{
public int compare(File f1, File f2)
{
return Long.valueOf(f2.lastModified()).compareTo(f1.lastModified());
}
});
if(listOfBackupFiles.length > filesToRetain){
File[] listOfBackupFilesToCheckForDeletion = new File[listOfBackupFiles.length - filesToRetain];
System.arraycopy(listOfBackupFiles, filesToRetain, listOfBackupFilesToCheckForDeletion, 0, listOfBackupFiles.length - filesToRetain);
for (File backupFile : listOfBackupFilesToCheckForDeletion)
{
if (backupFile.lastModified() < purgeTime)
{
if (backupFile.isFile())
{
System.out.println(backupFile.getName() + ", " + backupFile.lastModified() + " is going to delete");
backupFile.delete();
}
}
}
}
}
}
}
我试过如何根据天数保留文件。这就是这样做的逻辑。
public static void purgeFiles(int daysToRetain, String directory){
File backupDir = new File(directory);
long purgeTime = System.currentTimeMillis() - (daysToRetain * 24L * 60L * 60L * 1000L);
if(backupDir.exists()){
File[] listOfBackupFiles = backupDir.listFiles();
for(File backupFile : listOfBackupFiles){
if(backupFile.lastModified() < purgeTime){
if(backupFile.isFile()){
System.out.println(backupFile.getName()+" is going to delete");
backupFile.delete();
}
}
}
}
}
这里我有疑问,如何在一个目录中保留最新的10个文件。文件创建日期和时间不同。
创建文件没有固定的时间。文件不会每天、每周或每月创建。一个文件将在 2 天内创建,其他文件将在 5 天内创建。
所以,我想保留最近的 10 个文件。
Best way to list files in Java, sorted by Date Modified?
您可以使用比较器按修改日期对数组进行排序。 然后,只需检查数组是否大于 10,并对 10 之后的所有项目执行代码。
示例:
import java.io.File;
import java.util.Arrays;
import java.util.Comparator;
public class PurgeFiles
{
public static void main(String[] args)
{
purgeFiles(10, 10, "C:/testdir/");
}
public static void purgeFiles(int daysToRetain, int filesToRetain, String directory)
{
File backupDir = new File(directory);
long purgeTime = System.currentTimeMillis() - (daysToRetain * 24L * 60L * 60L * 1000L);
if (backupDir.exists())
{
File[] listOfBackupFiles = backupDir.listFiles();
Arrays.sort(listOfBackupFiles, new Comparator<File>()
{
public int compare(File f1, File f2)
{
return Long.valueOf(f2.lastModified()).compareTo(f1.lastModified());
}
});
if(listOfBackupFiles.length > filesToRetain){
File[] listOfBackupFilesToCheckForDeletion = new File[listOfBackupFiles.length - filesToRetain];
System.arraycopy(listOfBackupFiles, filesToRetain, listOfBackupFilesToCheckForDeletion, 0, listOfBackupFiles.length - filesToRetain);
for (File backupFile : listOfBackupFilesToCheckForDeletion)
{
if (backupFile.lastModified() < purgeTime)
{
if (backupFile.isFile())
{
System.out.println(backupFile.getName() + ", " + backupFile.lastModified() + " is going to delete");
backupFile.delete();
}
}
}
}
}
}
}