1

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.

tumisma
  • 375
  • 3
  • 14
Hash
  • 7,726
  • 9
  • 34
  • 53
  • Look For this :http://stackoverflow.com/questions/4096973/reading-windows-file-summary-properties-title-subject-author-in-java – Divya Nov 04 '14 at 17:36

1 Answers1

1

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);
    }
}
Mateus Viccari
  • 7,389
  • 14
  • 65
  • 101