2013-03-09 5 views
1

Mon APP ont besoin des privilèges root pour faire une analyse, donc j'écrire dans mon code commeComment copier/données/fichiers de données/sdcard?

« Runtime.getRuntime().exec("su"); », puis écrivez commande linux ou script shell en elle.

J'ai essayé de copier les fichiers /data/data/packagename/databases/webview.db vers/sdcard/test (les fichiers de la base de données source sont tous les fichiers de données de l'application existe dans mon téléphone portable, mais le code java je ne peux obtenir le fichier de mon application elle-même),

puis faire un peu analysis.But le problème est, le nom des fichiers source sont les mêmes, si j'utilise

« cp -r /data/data/*/webview.db /sdcard/test"

il y a toujours seulement un fichier dans le répertoire cible, je n'étais pas si bon shell linux

commande

, donc je veux savoir comment copier dans le répertoire cible et changer le nom du fichier ou tout simplement

garder la structure du répertoire source comme /sdcard/test/package/webview.db. Je suis chinois et mon

anglais n'est pas si bien, espérons que vous pouvez le comprendre, Merci!

+0

http://stackoverflow.com/questions/10735273/copy-folders-in-data-data-to-sdcard-viceversa – Ehsanjs

Répondre

0

Vous pouvez utiliser adb.

USB Une fois que vous connectez votre appareil

vous exécutez:

adb la traction de la YOURDEVICE /data/data/packagename/databases/webview.db

savoir ce que votre appareil est

vous exécutez:

périphériques ADB

Ce faisant, vous avez votre fichier webview.db sur votre bureau et vous pouvez l'utiliser comme vous le souhaitez

+0

Mais je veux utiliser la commande linux dans mon Android APP, je signifie mon APP besoin de privilèges root pour faire la chose ci-dessus, donc j'écris dans mon code comme « Runtime.getRuntime() exec. (» su «); », puis écrire la commande linux ou script shell dans it.Maybe Je did't faire spécifique décrire, désolé pour cela. – ShiningChan

2

je suis en utilisant ce code et cela fonctionne très bien!

public void copyDbToSdcard() { 
     try { 
      File sd = Environment.getExternalStorageDirectory(); 
      File data = Environment.getDataDirectory(); 

      if (sd.canWrite()) { 
       String currentDBPath = "//data//" + this.getPackageName() 
         + "//databases//db"; 
       String backupDBPath = Environment.getExternalStorageDirectory() 
         .toString() + "/Darama1/db"; 
       File currentDB = new File(data, currentDBPath); 
       File backupDB = new File(sd, backupDBPath); 

       if (currentDB.exists()) { 
        FileChannel src = new FileInputStream(currentDB) 
          .getChannel(); 
        FileChannel dst = new FileOutputStream(backupDB) 
          .getChannel(); 
        dst.transferFrom(src, 0, src.size()); 
        src.close(); 
        dst.close(); 
       } 
      } 
     } catch (Exception e) { 
     } 
    } 
+0

Mais cela ne peut qu'obtenir les fichiers de base de mon application, dont j'ai besoin pour obtenir tous les fichiers de base de données webview.db dans mon téléphone portable. Je pense qu'il a besoin des privilèges root dans la commande linux plutôt que dans le code java. – ShiningChan

+0

je suis en train d'utiliser votre code, mais il dit des marqueurs multiples à cette ligne \t - exception non gérée de type FileNotFoundException \t - Fuite des ressources: « » est \t jamais fermé ...... à nouveau FileInputStream (currentDB) – chhameed