Reputation: 8020
I need to find the accessed, modified, created date of the files in a directory (in sub directories as well). I heard you that you can use basicfileattributes to get them. This is what I tried so far:
Path file_dir = Paths.get("F:/");
BasicFileAttributes attrs = Files.readAttributes(file_dir, BasicFileAttributes.class);
System.out.println("Last accessed at:" + attrs.lastAccessTime());
System.out.println("Last modifired at:" + attrs.lastModifiedTime());
System.out.println("Created:" +attrs.creationTime());
I need to find them in all files and filter them so I can find out which one was created 1 day ago or 1 hour ago.
Upvotes: 1
Views: 191
Reputation: 7709
here you go:
public static void main(String[] args) throws Exception{
//Folder to search
File file = new File("C:\\Caixa");
//Get all files from the folder (including subfolders)
ArrayList<File> allFiles = new ArrayList<>();
listFiles(file, allFiles);
//Filter to use (1 day back from now)
Calendar filter = Calendar.getInstance();
filter.add(Calendar.DAY_OF_MONTH, -1);
//Or 1 hour ago
//filter.add(Calendar.HOUR_OF_DAY, -1);
//List to keep the files found using the filter
List<File> filesFound = new ArrayList<>();
//Search code
for (File fileSearched : allFiles) {
BasicFileAttributes attrs = Files.readAttributes(Paths.get(fileSearched.getAbsolutePath()), BasicFileAttributes.class);
Calendar creationTime = Calendar.getInstance();
creationTime.setTimeInMillis(attrs.creationTime().toMillis());
if(creationTime.after(filter)){
filesFound.add(fileSearched);
}
}
//Listing files searched using the filter
for (File fileFound : filesFound) {
System.out.println("File found: "+fileFound);
}
}
public static void listFiles(File directory, ArrayList<File> files) {
File[] fList = directory.listFiles();
for (File file : fList) {
if (file.isFile()) {
files.add(file);
} else if (file.isDirectory()) {
listFiles(file, files);
}
}
}
UPDATE
If you want to search by BOTH creation AND modification time, all you need to do is change a little the code:
//Search code
for (File fileSearched : allFiles) {
BasicFileAttributes attrs = Files.readAttributes(Paths.get(fileSearched.getAbsolutePath()), BasicFileAttributes.class);
Calendar creationTime = Calendar.getInstance();
creationTime.setTimeInMillis(attrs.creationTime().toMillis());
Calendar modifiedTime = Calendar.getInstance();
modifiedTime.setTimeInMillis(attrs.lastModifiedTime().toMillis());
if(creationTime.after(filter) || modifiedTime.after(filter)){
filesFound.add(fileSearched);
}
}
Upvotes: 1