2016-04-27 3 views
1

Я пытаюсь скопировать некоторые файлы из папки «Активы» (а также создать несколько новых файлов) во внешнюю папку.Как хранить файлы в указанном внешнем каталоге в Android

Я знаю, что мне нужно будет следующие разрешения -

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

Тогда, я должен проверить состояние внешнего хранения следующим образом (пример кода, используемый с официальным примером андроида) -

/* Checks if external storage is available for read and write */ 
public boolean isExternalStorageWritable() { 
    String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state)) { 
     return true; 
    } 
    return false; 
} 

/* Checks if external storage is available to at least read */ 
public boolean isExternalStorageReadable() { 
    String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state) || 
     Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
     return true; 
    } 
    return false; 
} 

Тогда , Я могу использовать getExternalFilesDir() as -

String finalOutputFilePath = context.getExternalFilesDir(null) + "/" + databaseName; 

и он сохранит файл где-то нравится - Android/data/myPackageName/files/

Но я хочу, чтобы файлы, которые будут храниться в определенной папке, например -

  • Создайте папку с именем «MyTestDirectory», если уже не существует в в база внешнего хранения (я не пишу SDCARD/MyTestDirectory, как я прочитал, что внешнее запоминающее устройство номенклатуры может отличаться одноранговой) и
  • магазин/скопировать файлы в этой папке только

Итак, мой вопрос заключается в том, как выбрать (создать &) указанную папку?

P.S. - Наверное, на этот вопрос, возможно, уже был дан ответ на SO, но я не мог его найти.

ответ

1

Чтобы создать папку, используйте метод createFolder.

private void createFolder(String folderName){ 
     File file=new File(Environment.getExternalStorageDirectory() + File.separator +folderName); 
     if(!file.exists()) 
      file.mkdirs(); 
    } 


    private void CopyAssets(String folderName) { 
      AssetManager assetManager = getAssets(); 
      String[] files = null; 
      try { 
       files = assetManager.list("Files"); 
      } catch (IOException e) { 
       Log.e("tag", e.getMessage()); 
      } 

      for(String filename : files) { 
       System.out.println("File name => "+filename); 
       InputStream in = null; 
       OutputStream out = null; 
       try { 
        in = assetManager.open("Files/"+filename); // if files resides inside the "Files" directory itself 
        out = new FileOutputStream(Environment.getExternalStorageDirectory().toString()+File.separator +folderName +"/" + filename); 
        copyFile(in, out); 
        in.close(); 
        in = null; 
        out.flush(); 
        out.close(); 
        out = null; 
       } catch(Exception e) { 
        Log.e("tag", e.getMessage()); 
       } 
      } 
     } 
     private void copyFile(InputStream in, OutputStream out) throws IOException { 
      byte[] buffer = new byte[1024]; 
      int read; 
      while((read = in.read(buffer)) != -1){ 
       out.write(buffer, 0, read); 
      } 
     } 
+0

Благодарим вас за ответ. Дайте мне немного времени, чтобы проверить его, и я буду отмечать его как принятый ответ, как только мне удастся. –

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