¿Es posible obtener la última fecha de modificación de un archivo de activos?

Bizarre pregunta: ¿es posible obtener la última fecha de modificación de un archivo en la carpeta de activos, o sería inútil e imposible?

Le pregunto porque estoy copiando una base de datos de sólo lectura de ahí en la carpeta de datos en el inicio de la aplicación, pero prefiero realizar la copia si el archivo existente es más antiguo que el almacenado en la carpeta de activos (o si el archivo No existe).

Si eso no es posible, ¿alguien sabe de una convención mejor? Puedo publicar eso en una pregunta separada si es necesario. TIA!

¿Qué tan grande y compleja es la base de datos? Es posible que sea más fácil y más flexible usar una instancia de SQLiteOpenHelper para manejar esto ya que con una llamada a getReadableDatabase() , creará si es necesario la base de datos y llamará a su onUpgrade para actualizar la base de datos para usted.

Todo lo que tiene que hacer es proporcionar un onCreate() para crear la base de datos, proporcionar onUpgrade() para actualizar e incrementar la versión de la base de datos (en onUpgrade() ) cuando cambie y Android manejará la creación y actualización de la base de datos para usted.

Alternativamente, (y no lo he intentado), parece AssetManager.list() puede proporcionarle una lista de rutas a sus activos, a continuación, utilice File (String path) para obtener un objeto File para la base de datos, y finalmente File.lastModified() para obtener la fecha modificada.

Oye, yo estaba teniendo el mismo problema que tú. Quería copiar y activos sólo si era más reciente. Así que hice el almacén sharedPreferences la última versión instalada, y la utilicé para comparar fechas:

Añado una entrada al archivo strings.xml para mantener la versión de la aplicación:

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

Luego pongo una cláusula if en el método onCreate de la clase principal:

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

Y agrego la nueva cadena de versión a las sharedPreferences en el método onPause, de esa manera se añadirá con seguridad antes de que onCreate se llame de nuevo:

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

Probablemente más simple que usar nombres de versión en el propio archivo.

Tenga en cuenta que los archivos de copia se ejecutarán la primera vez que se abra la aplicación, si tiene una versión por encima de 0.0 y sólo se volverá a ejecutar si aumenta la cadena de versión en versiones posteriores.

Tenga en cuenta que este ejemplo sólo funciona si tiene un único archivo para comparar, o no se preocupan por las versiones de archivos individuales. De lo contrario, podría utilizar varias cadenas diferentes para almacenar versiones de archivos.

Para un activo de solo lectura, traté de usar la marca de tiempo del archivo ( f.lastModified() / f.setSetModified(timestamp) ), y no funcionó porque f.setSetModified(timestamp) no funciona en Android. Al menos, en el 2.3.4 que usé.

Consulte https://stackoverflow.com/a/13996418/755804

  • SQLite SUM y LIMIT no parecen funcionar juntos
  • Cómo eliminar una fila de una tabla en SQLite android?
  • Recuperar un nombre de usuario y una contraseña en SQLITE DB por EMAIL_ADDRESS en ANDROID
  • Cómo eliminar las viejas filas de la base de datos sqlite en android?
  • Android - Guardar ubicación en la base de datos SQLite
  • ¿Detectando la transacción olvidada de SQLite en Android usando StrictMode?
  • ¿Es posible hacer una consulta sin procesar en la base de datos de metales de Android de meta sqlite?
  • Android Sqlite IN, sin sintaxis
  • SQLite Database: SQLiteDiskIOException: error de E / S de disco (código 1802)
  • Consulta SQLite desde varias tablas utilizando SQLiteDatabase
  • SQLiteOpenHelper onCreate no crea base de datos - o se está sobrescribiendo inmediatamente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.