Je suis désolé pour une question plutôt verte, mais je ne pouvais pas encore trouver de solution. Je tente de restaurer une base de données à partir d'une sauvegarde sur carte SD. Le code suivant (une légère version modifiée de celle fournie ici SO)comment copier la base de données de la carte SD à la base de données
try {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
if (sd.canWrite()) {
String currentDBPath =
"\\data\\com.dg\\databases\\" + com.dg.Constants.db_Table;
String backupDBPath = "com.dg";
File currentDB = new File(data, currentDBPath);
File backupDB = new File(sd, backupDBPath);
if (currentDB.exists()) {
FileChannel dst = new FileInputStream(currentDB).getChannel();
FileChannel src = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
}
line4.setText("Successful Import");
}
} catch (Exception e) {
line4.setText(e.toString());
}
Lancers NonWriteableChannelException même si le fichier de base de données n'est pas ouvert.
Merci pour votre réponse. Les répertoires sont définitivement OK - j'ai été en mesure de faire la sauvegarde avec le code presque identique en premier lieu. (La chaîne "\\" apparaît comme \ dans la sortie finale) – user1008771
Si vous ne pouvez pas lire/écrire le fichier, ils ne sont pas OK. Vous êtes sur un système Unix, donc les barres obliques inverses sont erronées. Ils pourraient fonctionner dans certains cas, mais ce serait seulement parce que Java compense votre erreur. Sérieusement. Sous Linux, barres obliques Maintenant, l'objet File dans Java, le formulaire que vous utilisez, prend deux paramètres. Un répertoire qui est votre répertoire parent et un nom de fichier. Vous passez un répertoire (le mauvais) et un répertoire mal formaté en tant que nom de fichier. Essayez le nouveau fichier ("/ data/data/[votre paquet]/bases de données/[votre fichier db]"). Cette forme prend un chemin complet en tant que chaîne. –
Merci, cela fait beaucoup de sens. Cependant, le problème persiste. La copie vers un autre emplacement de ce répertoire (c'est-à-dire /data/data/com.dg/databases/fakeDB) est réussie, mais pas le fichier DB lui-même. Cela a lieu avant la première ouverture de DB (activité splash) – user1008771