Возможно ли получить последнюю измененную дату из файла активов?

Необычный вопрос: возможно ли получить последнюю измененную дату файла в папке с активами, или это было бы бессмысленным и невозможным?

Я спрашиваю, потому что я копирую базу данных только для чтения оттуда в папку данных при запуске приложения, но скорее предпочту только выполнить копию, если существующий файл старше, чем тот, который хранится в папке с ресурсами (или если файл не существует).

Если это невозможно, кто-нибудь знает о лучшей конвенции? Я могу опубликовать это в отдельном вопросе, если это необходимо. ТИА!

Ответ 1

Насколько велика/сложна база данных? Возможно, вам будет проще и гибче использовать экземпляр SQLiteOpenHelper, чтобы обработать это, поскольку с помощью одного вызова getReadableDatabase(), он создаст при необходимости базу данных и вызовет onUpgrade, чтобы обновите базу данных для вас.

Все, что вам нужно сделать, это предоставить onCreate() для создания базы данных, предоставить onUpgrade() обновить и увеличить версию базы данных (в onUpgrade()), когда она изменится, и Android будет создайте и обновите базу данных для вас.

В качестве альтернативы (и я не пробовал это), он выглядит как AssetManager.list() может предоставить вам список путей к вашим активам, затем используйте File (String path), чтобы получить объект File для базы данных, и, наконец, File.lastModified(), чтобы получить измененную дату.

Ответ 2

Эй, у меня была такая же проблема, как и у вас. Я хотел копировать и использовать активы только в том случае, если он был более новым. Поэтому я сделал хранилище sharedPreferences последней установленной версией и использовал это для сравнения дат:

Я добавляю запись в файл strings.xml для хранения версии приложения:

<string name="version">0.3</string>

Затем я помещаю предложение if в метод onCreate основного класса:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if( Float.parseFloat(getString(R.string.version)) > prefs.getFloat("LastInstalledVersion", (float) 0.0 ) ) {
                copyfiles();
}

И я добавляю строку новой версии в sharedPreferences в методе onPause, таким образом, она будет добавлена ​​точно, прежде чем функция onCreate будет вызвана еще раз:

SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
editor.putFloat("LastInstalledVersion", Float.parseFloat(getString(R.string.version)) );
editor.commit();

Возможно, проще, чем использовать имена версий в самом файле.

Обратите внимание, что copyfiles будет запускаться при первом открытии приложения, если у вас есть версия выше 0.0, и будет работать снова, если вы увеличите строку версии в более поздних версиях.

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

Ответ 3

Для ресурса только для чтения я попытался использовать временную метку файла (f.lastModified()/f.setSetModified(timestamp)), а не работает, потому что f.setSetModified(timestamp) не работает на Android. По крайней мере, на 2.3.4, который я использовал.

См. fooobar.com/info/518971/...