Android: How to get a file's creation date?

Android

Android Problem Overview


This is my code:

File TempFiles = new File(Tempfilepath);
if (TempFiles.exists()) {
    String[] child = TempFiles.list();
    for (int i = 0; i < child.length; i++) {
        Log.i("File: " + child[i] + " creation date ?");
        // how to get file creation date..?
    }
}

Android Solutions


Solution 1 - Android

The file creation date is not an available, but you can get the last-modified date:

File file = new File(filePath);
Date lastModDate = new Date(file.lastModified());

System.out.println("File last modified @ : "+ lastModDate.toString());

Solution 2 - Android

Here's how I would do it

// Used to examplify deletion of files more than 1 month old
// Note the L that tells the compiler to interpret the number as a Long
final int MAXFILEAGE = 2678400000L; // 1 month in milliseconds

// Get file handle to the directory. In this case the application files dir
File dir = new File(getFilesDir().toString());

// Obtain list of files in the directory. 
// listFiles() returns a list of File objects to each file found.
File[] files = dir.listFiles();
      
// Loop through all files
for (File f : files ) {
   
   // Get the last modified date. Milliseconds since 1970
   Long lastmodified = f.lastModified();

   // Do stuff here to deal with the file.. 
   // For instance delete files older than 1 month
   if(lastmodified+MAXFILEAGE<System.currentTimeMillis()) {
      f.delete();
   }
}

Solution 3 - Android

The file creation date is not an available piece of data exposed by the Java File class. I recommend you rethink what you are doing and change your plan so you will not need it.

Solution 4 - Android

Starting in API level 26, you can do this:

File file = ...;
BasicFileAttributes attr = Files.readAttributes(file.toPath(), BasicFileAttributes.class);
long createdAt = attr.creationTime().toMillis();

Solution 5 - Android

There is an alternate way. When you open the file for the first time save the lastModified date, before you modify the folder.

long createdDate =new File(filePath).lastModified();

And then when you close the file do

File file =new File(filePath);
file.setLastModified(createdDate);

If you have done this since the file was created, then you will have the createdDate as the lastModified date all the time.

Solution 6 - Android

Having backward compatibility in mind I would rather use the following:

fun getLastModifiedTimeInMillis(file: File): Long? {
    return try {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            getLastModifiedTimeFromBasicFileAttrs(file)
        } else {
            file.lastModified()
        }
    } catch (x: Exception) {
        x.printStackTrace()
        null
    }
}

@RequiresApi(Build.VERSION_CODES.O)
private fun getLastModifiedTimeFromBasicFileAttrs(file: File): Long {
    val basicFileAttributes = Files.readAttributes(
        file.toPath(),
        BasicFileAttributes::class.java
    )
    return basicFileAttributes.creationTime().toMillis()
}

alternatively, if you are dealing with jpg, jpegs you can use ExifInterface

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAlexiView Question on Stackoverflow
Solution 1 - AndroidJorgesysView Answer on Stackoverflow
Solution 2 - AndroidLars Rye JeppesenView Answer on Stackoverflow
Solution 3 - AndroidCommonsWareView Answer on Stackoverflow
Solution 4 - AndroidSteve StratesView Answer on Stackoverflow
Solution 5 - Androidcoolcool1994View Answer on Stackoverflow
Solution 6 - AndroidLukasView Answer on Stackoverflow