Say you have a directory of files, like so:
Users/Shash/Desktop/Files
├── file_02_12_20_23_50_31
├── file_03_12_20_23_11_42
├── file_11_11_19_23_31_12
├── file_23_06_19_23_11_35
├── file_28_11_20_23_31_41
├── file_29_11_20_23_11_42
└── file_30_11_20_23_41_12
You could use parse LocalDate
's from the file names and filter the ones that are before the LocalDate
corresponding to one week ago:
import java.io.File;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
class Main {
public static void main(String[] args) {
File fileDirectory = new File("/Users/Shash/Desktop/Files");
List<File> filesWithDates =
Arrays.asList(Objects.requireNonNull(fileDirectory.listFiles()));
System.out.println("Before filtering:");
filesWithDates.forEach(f -> System.out.println(f.getName()));
List<File> filesWithDatesUpToWeekOld = filterOldFiles(filesWithDates);
System.out.println("After filtering:");
filesWithDatesUpToWeekOld.forEach(f -> System.out.println(f.getName()));
}
private static List<File> filterOldFiles(List<File> filesWithDates) {
List<File> filteredFiles = new ArrayList<>();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
"'file'_dd_MM_yy_HH_mm_ss", Locale.ENGLISH);
LocalDate oneWeekAgo = LocalDate.now().minus(1, ChronoUnit.WEEKS);
for (File fileWithDate : filesWithDates) {
LocalDate dateTime = LocalDate.parse(fileWithDate.getName(), formatter);
if (!dateTime.isBefore(oneWeekAgo)) {
filteredFiles.add(fileWithDate);
}
}
return filteredFiles;
}
}
Output:
Before filtering:
file_30_11_20_23_41_12
file_03_12_20_23_11_42
file_23_06_19_23_11_35
file_28_11_20_23_31_41
file_11_11_19_23_31_12
file_29_11_20_23_11_42
file_02_12_20_23_50_31
After filtering:
file_30_11_20_23_41_12
file_03_12_20_23_11_42
file_28_11_20_23_31_41
file_29_11_20_23_11_42
file_02_12_20_23_50_31