Android: Как узнать дату создания файла? - PullRequest
61 голосов
/ 05 марта 2010

Это мой код:

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

Ответы [ 6 ]

164 голосов
/ 06 марта 2010

Файл дата создания недоступна , но вы можете получить дату последнего изменения :

File file = new File(filePath);
Date lastModDate = new Date(file.lastModified());
Log.i("File last modified @ : "+ lastModDate.toString());
22 голосов
/ 16 сентября 2010

Вот как бы я это сделал

// 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();
   }
}
20 голосов
/ 05 марта 2010

Дата создания файла не является доступным фрагментом данных, предоставляемым классом Java File.Я рекомендую вам переосмыслить то, что вы делаете, и изменить свой план, чтобы он вам не понадобился.

5 голосов
/ 07 февраля 2013

Есть альтернативный способ. При первом открытии файла сохраните дату lastModified, прежде чем изменять папку.

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

А потом при закрытии файла сделай

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

Если вы сделали это после того, как файл был создан, то у вас будет постоянно указана дата создания последнего изменения.

4 голосов
/ 24 января 2018

Начиная с API уровня 26, вы можете сделать это:

File file = ...;
BasicFileAttributes attr = Files.readAttributes(file.toPath(), BasicFileAttributes.class);
long createdAt = attr.creationTime().toMillis();
0 голосов
/ 14 мая 2018

Хотя в API Платформы Android не может быть никакого способа сделать это, есть kludges , которые будут работать , в некоторых случаях . Вот один из них: запустите shell команду , чтобы сделать

ls -gnc filename

Согласно выводу ls --usage, опция -c говорит ls "использовать ctime для отметок времени". На моем Galaxy J3 (Android 7) выдает

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

, из которого вы можете извлечь дату и время. К сожалению, у вас нет контроля над форматом даты, и нет информации о часовом поясе, используемом для отображения. Но это лучше, чем ничего.

Отказ от ответственности: Это не работает на некоторых других устройствах Android. Например. на Huawei H30 под управлением Android 4.2.2 ls не принимает вариант -c. Что еще хуже: в HTC Desire 550 (Android 7.0) команда ls утверждает, что для отображения ctime выбрана опция -c, а если вы запустите ls -cl, вы получите вывод даты без ошибок. Но показанная дата - действительно время последней модификации, а не время создания! Таким образом, не только время создания не поддерживается, но и трудно обнаружить, что оно не поддерживается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...