什么是最简单的方法从android.net.Uri对象持有一个文件:类型转换为java.io.File对象在Android?
我尝试了下面的方法,但不管用:
File file = new File(Environment.getExternalStorageDirectory(), "read.me");
Uri uri = Uri.fromFile(file);
File auxFile = new File(uri.toString());
assertEquals(file.getAbsolutePath(), auxFile.getAbsolutePath());
另一种方法是创建一个临时文件。做那件事:
fun createTmpFileFromUri(context: Context, uri: Uri, fileName: String): File? {
return try {
val stream = context.contentResolver.openInputStream(uri)
val file = File.createTempFile(fileName, "", context.cacheDir)
org.apache.commons.io.FileUtils.copyInputStreamToFile(stream,file)
file
} catch (e: Exception) {
e.printStackTrace()
null
}
}
我们使用Apache公共库FileUtils类。将它添加到您的项目:
implementation "commons-io:commons-io:2.7"
注意,MAKE SURE在使用后调用file.delete()。
查阅更多资料。
我是这样做的:
try {
readImageInformation(new File(contentUri.getPath()));
} catch (IOException e) {
readImageInformation(new File(getRealPathFromURI(context,
contentUri)));
}
public static String getRealPathFromURI(Context context, Uri contentUri) {
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(contentUri, proj,
null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
所以基本上首先我尝试使用一个文件,即相机拍摄的照片,并保存在SD卡上。这对返回的图像不起作用:
意图photoPickerIntent =新的意图(Intent. action_pick);
在这种情况下,需要通过getRealPathFromURI()函数将Uri转换为真实路径。
所以结论是,这取决于你想转换为File的Uri类型。