Подтвердить что ты не робот

Последнее доступное время любого файла в Android

file.lastModified() возвращает последнюю измененную дату. Файл, похоже, не имеет метода для получения даты lastAccessed. Есть ли способ программно получить последнюю доступную дату/время любого файла в android?

4b9b3361

Ответ 1

Вы можете получить последнее время доступа, используя stat или lstat. Два метода: android.system.Os.stat(String path) и android.system.Os.lstat(String path), были обнародованы в Android 5.0. В предыдущих версиях Android вам нужно будет использовать отражение или запустить команду в оболочке.

Использование:

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.

Ответ 2

Попробуйте следующее:

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

Ответ 3

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