2016-12-28 6 views
0
public void exportDatabse(String databaseName) { 

     try { 
      File sd = Environment.getExternalStorageDirectory(); 
      File data = Environment.getDataDirectory(); 
      if (sd.canWrite()) { 
       String currentDBPath = "//data//"+getPackageName()+"//databases//"+databaseName+""; 
       String backupDBPath ="//database.sql"; 
       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(); 
        Log.i(TAG,"coping database sucessfull"); 
       } 
      } 
     } catch (Exception e) { 
     Log.i(TAG,"exception! "+ e.getMessage()); 
     } 
    } 

Während des Debuggen den sd Speicherort der Datei File sd = Environment.getExternalStorageDirectory(); istEnvironment.getExternalStorageDirectory gibt falschen Wert

/storage/emulierten/0

enter image description here

Die kopierte Datei ist nicht sichtbar in meiner SD-Karte. Außerdem weiß ich, dass der Speicherort der sd Datei falsch ist. Wie kann ich die Datei database.sql bekommen? UPDATE

enter image description here

+1

[Externer Speicher] (https://commonsware.com/blog/2014/04/08/storage-situation-external-storage.html) nicht [Wechseldatenträger] (https: // commonsware.com/blog/2014/04/09/storage-situation-removable-storage.html). Sie haben viele doppelte '/' Werte, die behoben werden sollten. Und Ihre Kopie wird für die meisten Apps (und Desktop-Betriebssysteme) nicht sichtbar sein, es sei denn, Sie erhalten diese Kopie durch den 'MediaStore' indiziert (https://stackoverflow.com/questions/32789157/how-towrite-files) -zu-extern-öffentlich-Speicher-in-android-so-dass-sie-sind-sichtbar. – CommonsWare

Antwort

2

Der von Environment.getExternalStorageDirectory zurückgegebene Wert korrekt ist, und es ist nichts falsch mit ihm.

Das Problem hier ist, dass der Android Device Monitor Symlinks (symbolische Links) nicht direkt unterstützt. Sie sollten sie im Datei-Explorer manuell verfolgen/erweitern.

In diesem Fall müssen Sie den Ordner storage erweitern, gefolgt von dem Ordner emulated und .

Wenn das nicht funktioniert, möchten Sie vielleicht versuchen, den Ordner storage zu erweitern, gefolgt von dem Ordner self und primary.

TLDR: manuell folgen/erweitern Sie die Pfade in der Spalte info.

Bearbeiten: Versuchen Sie, die gelb markierten Ordner zu erweitern.

Android Device Monitor File Explorer

+0

die Dateien auf meinem Zielordner sind im Ordner 6314-6720, also muss ich Datei auf diesem Pfad erstellen? Hattest du irgendwelche Erfahrung, wie es geht? – Expiredmind

+0

Sie müssen nichts erstellen (Ihr Code scheint in Ordnung), erweitern Sie einfach die richtigen Ordner und folgen Sie den Symlinks. Stellen Sie außerdem sicher, dass der Code nicht fehlschlägt (überprüfen Sie das Logcat). Sie benötigen außerdem die Berechtigung zum Schreiben in den externen Speicher: WRITE_EXTERNAL_STORAGE. –

+0

in Android-Geräteüberwachung? Der Speicher/emulieren Ordner ist leer oder ich habe keinen Zugang zu ihm – Expiredmind

Verwandte Themen