Convert file: Uri to File in Android
What you want is...
new File(uri.getPath());
... and not...
new File(uri.toString());
Note: uri.toString()
returns a String in the format: "file:///mnt/sdcard/myPicture.jpg"
, whereas uri.getPath()
returns a String in the format: "/mnt/sdcard/myPicture.jpg"
.
use
InputStream inputStream = getContentResolver().openInputStream(uri);
directly and copy the file. Also see:
https://developer.android.com/guide/topics/providers/document-provider.html
After searching for a long time this is what worked for me:
File file = new File(getPath(uri));
public String getPath(Uri uri)
{
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
if (cursor == null) return null;
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String s=cursor.getString(column_index);
cursor.close();
return s;
}
Android + Kotlin
-
Add dependency for Kotlin Android extensions:
implementation 'androidx.core:core-ktx:{latestVersion}'
-
Get file from uri:
uri.toFile()
Android + Java
Just move to top ;)