2016-10-18 11 views
0

Я пытаюсь создать процесс резервного копирования/восстановления (экспорта/импорта) для приложения SQLite Database.Как я могу получить доступ к файлу, который я создал извне? AKA где файл?

Хотя я, кажется, создал и заполнил файл (ОК, теперь я знаю, что у меня есть). Я не вижу файл в DDMS или в проводнике Windows. Мне бы очень хотелось иметь возможность сделать последнее (см. Ниже для более конкретного вопроса).

Я успешно написал файл и прочитать файл, используя следующий код:

package mjt.sqlitetutorial; 

     import android.database.Cursor; //+++++ Added 
     import android.os.Build; 
     import android.os.Environment; 
     import android.support.v7.app.AppCompatActivity; 
     import android.os.Bundle; 
     import android.util.Log;  //+++++ Added 

     import java.io.BufferedOutputStream; 
     import java.io.BufferedReader; 
     import java.io.File; 
     import java.io.FileInputStream; 
     import java.io.FileOutputStream; 
     import java.io.FileReader; 
     import java.io.IOException; 
     import java.io.InputStreamReader; 
     import java.io.OutputStreamWriter; 



public class MainActivity extends AppCompatActivity { 

    public int API_VERSION = Build.VERSION.SDK_INT; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (API_VERSION >= 23) { 
      ExternalStoragePermissions.verifyStoragePermissions(this); 
     } 

     final String EXTSTGTAG = "EXTERNSTG"; 

     File file = getExternalFilesDir("File"); 
     Log.i(EXTSTGTAG,file.toString()); 
     //String extstgdirabs = Environment.getExternalStorageDirectory().getAbsolutePath(); 
     String extstgdirpth = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath(); 
     Log.i(EXTSTGTAG,"<=\nEXTERN STG PUB DIR=>" + extstgdirpth); 
     String filepath = extstgdirpth + File.separator + "myfile.txt"; 
     Log.i(EXTSTGTAG,"Full File Path and name is\n\t" + filepath); 

     File f = new File(filepath); 
     if(!f.exists()) { 
      Log.i(EXTSTGTAG,"File did not exist (path=" + filepath + ")"); 
      try { 
       f.createNewFile(); 
      } 
      catch (IOException e) { 
       Log.e(EXTSTGTAG,"Failure Creating New File MSG=" + e.getMessage()); 
      } 
     } 
     if(f.exists()) { 
      Log.i(EXTSTGTAG,"File Already Exists (" + filepath + ")"); 
      try { 
       Log.i(EXTSTGTAG,"Creating FileOutputStream instance."); 
       FileOutputStream fos = new FileOutputStream(f); 
       Log.i(EXTSTGTAG,"Creating OutputStreamWriter instance from FileOutputStream."); 
       OutputStreamWriter osw = new OutputStreamWriter(fos); 
       Log.i(EXTSTGTAG,"Adding Data to OutputStreamWriter."); 
       osw.append("My Test Data."); 

       Log.i(EXTSTGTAG,"Closing OutputStreamWriter."); 
       osw.close(); 
       Log.i(EXTSTGTAG,"Flushing FileOutputStream."); 
       fos.flush(); 
       Log.i(EXTSTGTAG,"Closing FileOutputStream"); 
       fos.close(); 
       Log.i(EXTSTGTAG,"All Done OK."); 
      } catch (IOException e) { 
       Log.e(EXTSTGTAG, "Failure Trying to write to file." + e.getMessage()); 
       e.printStackTrace(); 
      } 
     } else { 
      Log.i(EXTSTGTAG,"File doesn't appear to exist when it should????"); 
     } 
     f.setReadable(true); 
     f.setWritable(true); 
     if(f.exists()) { 
      try { 
       byte[] bytes; 
       FileInputStream fis = new FileInputStream(f); 
       InputStreamReader isr = new InputStreamReader(fis); 
       BufferedReader br = new BufferedReader(isr); 
       StringBuilder sb = new StringBuilder(); 
       String line = null; 
       while((line = br.readLine()) != null) { 
        sb.append(line).append("\n"); 
       } 
       br.close(); 
       Log.i(EXTSTGTAG,"Read the following data:\n" + sb.toString()); 
      } 
      catch (IOException e) { 
       Log.e(EXTSTGTAG,"Failure trying to read file." + e.getMessage()); 
       e.printStackTrace(); 
      } 
     } 

    } 
} 

Выход в журнал (с использованием EXTERN в качестве фильтра) показывает (обратите внимание на первый запуск при установке вводного App терпит неудачу ., но запросы и наборы разрешений Я не считаю, что это вопрос/причины): -

10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: /storage/emulated/0/Android/data/mjt.sqlitetutorial/files/File 
10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: <= 
               EXTERN STG PUB DIR=>/storage/emulated/0/Download 
10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: Full File Path and name is 
               /storage/emulated/0/Download/myfile.txt 
10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: File Already Exists (/storage/emulated/0/Download/myfile.txt) 
10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: Creating FileOutputStream instance. 
10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: Creating OutputStreamWriter instance from FileOutputStream. 
10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: Adding Data to OutputStreamWriter. 
10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: Closing OutputStreamWriter. 
10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: Flushing FileOutputStream. 
10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: Closing FileOutputStream 
10-18 12:54:40.169 32393-32393/? I/EXTERNSTG: All Done OK. 
10-18 12:54:40.169 32393-32393/? I/EXTERNSTG: Read the following data: 
               My Test Data. 

последняя строка указывает, что он прочитал файл (я предполагаю). В течение предоставленных сообщений нет других сообщений журнала (многие до и после, хотя).

устройство, на котором я тестирую это, является ненарушенной HTC One M8 с SD-картой. Тем не менее, я считаю, что /storage/emulated/0/Загрузить, каталог, в котором записывается файл, находится во внутренней памяти.

С DDMS Я, кажется, не могу это видеть (фактическая карта SD имеет каталог s, а не каталог загрузки).

В проводнике Windows я могу видеть, как внутреннего хранения и SD карты в качестве устройств под устройством HTC_0PKV1.

В проводнике Windows Скачать в каталоге есть (через свойства) 0 Каталоги и файлы. Ни чтение, ни скрытое не отмечены галочкой.

Я пробовал оба с setReadable и setWritable().

Я только что попробовал использовать диспетчер файлов по телефону и теперь могу видеть файл. Итак, более конкретно, возникает вопрос: Есть ли какой-либо способ исключить укоренение телефона и перемещение файла через диспетчер файлов по телефону, чтобы получить доступ к файлу через проводник Windows?

Я также должен указать, что приложение будет работать на планшетах, поэтому метод должен быть общим, а не специфичным для устройства.

ответ

0

После отсоединения и повторного подключения USB-кабеля файл становится видимым в проводнике Windows. Я не уверен, если это как MTP предназначен для работы, или это может быть связано, возможно, с АБР в соответствии с настоящим сниппета: -

Однако, если вы когда-либо пытались разблокировать устройство, например, чтобы установить новое ПЗУ или корень его, то у вас может быть один или другой установлен драйвер Android Debug Bridge (ADB) на вашем компьютере. Этот драйвер отлично подходит для того, чтобы использовать компьютер для отправки команд на ваше устройство, но это может испортить ваши манипуляции с файлами easy-peasy.

найдено в How to Get Your Android Device to Show up in File Explorer (If It Isn’t)

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

  • Нет связанных вопросов^_^