2017-01-31 22 views
0

Я пытаюсь скопировать файл из папки загрузки в другой каталог. я использовал этот код, чтобы получить путь к файлуandroid Получить имя и путь к файлу из каталога загрузки

int PICKFILE_RESULT_CODE=1; 
     Intent chooseFile = new Intent(Intent.ACTION_GET_CONTENT); 
     chooseFile.setType("*/*"); 
     chooseFile = Intent.createChooser(chooseFile, "Choose a file"); 
     startActivityForResult(chooseFile,PICKFILE_RESULT_CODE); 

Я также использовал

@Override 
public void onActivityResult(int requestCode, int resultCode, 
          Intent returnIntent) { 
    // If the selection didn't work 
    if (resultCode != RESULT_OK) { 
     // Exit without doing anything else 
     return; 
    } else { 
     returnUri = returnIntent.getData(); 
     String src = returnUri.getPath(); 
     Toast.makeText(this, src, Toast.LENGTH_SHORT).show(); 

    } 
} 

код прекрасно работает, если файл находится за пределами директории загрузки, когда в нем путь, который я получаю в форма номера не фактическое имя файла: /document/2399 это дает ошибку файла не найдено , в то время как путь от корня: /storage/emulated/0/myDB.db3 это работает штраф

Просьба помочь мне исправить это

ответ

1

код работает отлично, если файл находится вне каталога загрузки

Нет, это не так. Он отлично работает, если схема Uri - это file. Большую часть времени это будет content.

Я пытаюсь скопировать файл из папки загрузки в другой каталог.

Использование openInputStream() на ContentResolver, чтобы получить InputStream на содержание идентифицированного Uri. Это работает как для схем file, так и для content. Затем используйте стандартный ввод/вывод Java для копирования содержимого с InputStream в нужное место.

+0

Он отлично работает ... спасибо. –

0

Вот новый код:

int PICKFILE_RESULT_CODE=1; 
    Intent chooseFile = new Intent(Intent.ACTION_GET_CONTENT); 
    chooseFile.setType("*/*"); 
    chooseFile = Intent.createChooser(chooseFile, "Choose a file"); 
    startActivityForResult(chooseFile,PICKFILE_RESULT_CODE); 

И использовали:

@Override 
public void onActivityResult(int requestCode, int resultCode, 
          Intent returnIntent) { 
     InputStream is = null; 
    // If the selection didn't work 
    if (resultCode != RESULT_OK) { 
     // Exit without doing anything else 
     return; 
    } else { 
     // Get the file's content URI from the incoming Intent 
     Uri returnUri = returnIntent.getData(); 
     try { 
      is = getContentResolver().openInputStream(returnUri); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     try { 
      BackUpHelper.importDB(is); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 


    } 

public static void importDB(InputStream is) throws IOException { 

    OutputStream os = null; 

    try { 
    String currentDBPath = DataBaseHelper2.DB_PATH+DataBaseHelper2.DB_NAME; 
    File outPut = new File(currentDBPath); 

     os = new FileOutputStream(outPut); 


     byte[] buffer = new byte[1024]; 



     while (is.read(buffer) > 0) { 


      os.write(buffer); 


     } 
     Toast.makeText(context, R.string.export_successful, 
       Toast.LENGTH_SHORT).show(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
     Toast.makeText(context, R.string.export_failed, Toast.LENGTH_SHORT) 
       .show(); 
    }finally { 
     os.flush(); 
     os.close(); 
     is.close(); 
    } 

}