Android中任何文件的上次访问时间

时间:2016-05-24 09:37:38

标签: android

file.lastModified()返回上次修改日期。 File似乎没有任何方法来获取lastAccessed日期。有没有办法以编程方式获取android中任何文件的上次访问日期/时间?

3 个答案:

答案 0 :(得分:15)

您可以使用statlstat获取上次访问时间。这两种方法android.system.Os.stat(String path)android.system.Os.lstat(String path)在Android 5.0中公开。在以前的Android版本中,您需要使用反射或在shell中运行命令。

用法:

Android 5.0 +

long lastAccessTime = Os.lstat(file.getAbsolutePath()).st_atime;

在Android 5.0之前使用反射

Class<?> clazz = Class.forName("libcore.io.Libcore");
Field field = clazz.getDeclaredField("os");
if (!field.isAccessible()) {
  field.setAccessible(true);
}
Object os = field.get(null);

Method method = os.getClass().getMethod("lstat", String.class);
Object lstat = method.invoke(os, file.getAbsolutePath());

field = lstat.getClass().getDeclaredField("st_atime");
if (!field.isAccessible()) {
  field.setAccessible(true);
}
long lastAccessTime = field.getLong(lstat);

注意:

我不认为在Android上使用上次访问时间。来自java.nio文档:

  

如果文件系统实现不支持时间戳来指示上次访问的时间,则此方法返回特定于实现的默认值,通常是最后修改时间或表示时间的FileTime(1970-01-01T00 :00:00Z)

我测试了使用以下命令更改上次访问时间:

touch -a [PATH]

这确实改变了以root用户身份运行命令时的上次访问时间。但是,我不认为上次访问的时间会在Android上更新/使用。

答案 1 :(得分:0)

试试这个:

javaxt.io.File file = new javaxt.io.File("file-path");
file.getLastAccessTime();

答案 2 :(得分:-1)

lastModified()

import java.io.File;
import java.util.Date;

public class FileExample {
   public static void main(String[] args) {

      File f = null;
      String path;
      long millisec;
      boolean bool = false;

      try{      
         f = new File("c:/demo.txt");

         bool = f.exists();

         if(bool)
         {
            millisec = f.lastModified();

            // date and time
            Date dt = new Date(millisec);

            // path
            path = f.getPath();

            System.out.print(path+" last modified at: "+dt);
         }
      }catch(Exception e){
         e.printStackTrace();
      }
   }
}