2016-12-28 3 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()); 
     } 
    } 

При отладке в sd местоположение файла File sd = Environment.getExternalStorageDirectory(); являетсяEnvironment.getExternalStorageDirectory возвращает неправильное значение

/хранение/эмулировать/0

enter image description here

скопированный файл не виден в моей SD-карте. Кроме того, я знаю, что неправильное расположение файла sd. Как я могу получить файл database.sql? UPDATE

enter image description here

+1

[Внешнее запоминающее устройство] (https://commonsware.com/blog/2014/04/08/storage-situation-external-storage.html) не [съемный носитель] (https: // commonsware.com/blog/2014/04/09/storage-situation-removable-storage.html). У вас много дублированных значений '/', которые должны быть исправлены. И ваша копия не будет видна большинству приложений (и настольных операционных систем), если [вы не получите эту копию, индексированную «MediaStore»] (https://stackoverflow.com/questions/32789157/how-to-write-files -в-внешнего Государственно-хранения-в-андроида-так, что-они-являются-visibl). – CommonsWare

ответ

2

Значение, возвращаемое Environment.getExternalStorageDirectory является правильным, и нет ничего плохого с ним.

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

Так что в вашем случае вам необходимо развернуть папку storage, а затем папку emulated и 0.

Если это не сработает, вы можете попытаться развернуть папку storage, а затем папку self и primary.

TLDR: вручную следует/разворачивает пути в столбце info.

Редактировать: Попробуйте расширить папки, отмеченные желтым цветом.

Android Device Monitor File Explorer

+0

файлы в папках назначения находятся в папке 6314-6720, поэтому мне нужно создать файл на этом пути? у вас есть опыт, как это сделать? – Expiredmind

+0

Вам не нужно ничего создавать (ваш код кажется прекрасным), просто разверните правильные папки и следуйте символическим ссылкам. Также убедитесь, что код не работает (проверьте лог-код), вам также необходимо разрешение на запись во внешнее хранилище: WRITE_EXTERNAL_STORAGE. –

+0

в Android Device Monitor? Папка хранения/эмуляции пуста или у меня нет доступа к ней – Expiredmind

Смежные вопросы