Android:如何获取文件的创建日期?

时间:2010-03-05 19:07:16

标签: android

这是我的代码:

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..?
    }
}

7 个答案:

答案 0 :(得分:163)

文件创建日期不可用,但您可以获取last-modified date

File file = new File(filePath);
Date lastModDate = new Date(file.lastModified());
Log.i("File last modified @ : "+ lastModDate.toString());

答案 1 :(得分:22)

以下是我将如何做到这一点

// 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();
   }
}

答案 2 :(得分:20)

文件创建日期不是Java File类公开的可用数据。我建议你重新考虑你在做什么,改变你的计划,这样你就不需要了。

答案 3 :(得分:5)

还有另一种方法。 在您修改文件夹之前,第一次打开文件时保存lastModified日期。

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

然后当你关闭文件时

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

如果您在创建文件后已经这样做了,那么您将始终将createdDate作为lastModified日期。

答案 4 :(得分:4)

从API级别26开始,您可以这样做:

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

答案 5 :(得分:3)

考虑到向后兼容性,我宁愿使用以下内容:

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()
}

或者,如果要处理jpg,jpegs,则可以使用ExifInterface

答案 6 :(得分:0)

虽然Android平台API中可能没有方法可以执行此操作,但 kludges 在某些情况下 。这是一个:启动shell command来做

ls -gnc filename

根据ls --usage的输出,-c选项告诉ls&#34;使用ctime作为时间戳&#34;。 在我的Galaxy J3(Android 7)上,它会产生

-rwxrwx--x 1 1015 7623004 2018-03-28 10:54 filename

您可以从中提取日期和时间。遗憾的是,您无法控制日期格式,也没有关于用于显示的时区的信息。但它总比没有好。

免责声明:这不适用于其他一些Android设备。例如。在运行Android 4.2.2的华为H30上,ls没有-c选项。更糟糕的是:在HTC Desire 550(Android 7.0)上,ls命令声称使用-c选项显示ctime,如果你运行ls -cl,你将获得一个日期输出错误。但显示的日期确实是最后的修改时间,而不是创建时间!因此,不仅不支持创作时间,而且很难发现它不受支持。