Невозможно получить Filepath из URI, нет такого файла или исключение найденного каталога - PullRequest
0 голосов
/ 21 мая 2019

Я пытался получить путь к файлу файла с устройства Android и сохранить его на FTP-сервере с помощью Intent, объект FILE инициализируется по пути, который я получаю из шаблона URI, но когда я отправляю этот объект File в FileInputStream, он дает мнеисключение файла не найден

 Uri uri;
    FileInputStream fis = null;
    if (requestCode==6 && resultCode==RESULT_OK && data!=null)
    {
        uri=data.getData();//return URI of selected File
        File fil= null;
        try {
            fil = new File(getRealPathFromURI(uri));
            fis= new FileInputStream(fil);
            client.storeFile(filePath,fis);
        } catch (Exception e) {
            e.getMessage();
        }
 private String getRealPathFromURI(Uri contentURI) {
    String result;
    Cursor cursor = NavigationDrawer.this.getContentResolver().query(contentURI, null, null, null, null);
    if (cursor == null) { // Source is Dropbox or other similar local file path
        result = contentURI.getPath();
    } else {
        cursor.moveToFirst();
        int idx = 0;//cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA);
        result = cursor.getString(idx);
        cursor.close();
    }
    return result;
}

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Я пробовал это, чтобы получить абсолютный путь от устройства, он прекрасно работает, когда я выбираю файл с SD-карты, но не работает на внутренней памяти Строка fullpath = Environment.getExternalStorageDirectory (). GetAbsolutePath () + filePath;

0 голосов
/ 21 мая 2019

Возможно, вы не сможете получить доступ к абсолютному пути к файлу из вашего Uri. Вместо этого, если вам требуется путь к файлу, вы можете попытаться открыть InputStream в этом Uri и использовать его для копирования файла в папку, доступную для вашего приложения. Например:

try (InputStream is = context.getContentResolver().openInputStream(uri)) {
    final File file = new File(context.getCacheDir(), "filename");
    try (OutputStream os = new FileOutputStream(file)) {
        byte[] buffer = new byte[1024];
        int read;
        while ((read = input.read(buffer))>0) {
            os.write(buffer, 0, read);
        }
        os.flush();
    }
    //File copy's finished, so you can access its path
    try(FileInputStream fis = new FileInputStream(file)) {
        client.storeFile(file.getAbsolutePath(),fis);
    }
}
...