Java 在android中尝试读取uri时未找到文件异常
我想从uri读取fileInputStream,但它返回了一个“未找到文件”异常 这是我目前的代码:Java 在android中尝试读取uri时未找到文件异常,java,android,Java,Android,我想从uri读取fileInputStream,但它返回了一个“未找到文件”异常 这是我目前的代码: Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); intent.addCategory(Intent.CATEGORY_OPENABLE); try { startActivityForResult(Intent.createChooser(int
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
try {
startActivityForResult(Intent.createChooser(intent, "Select a File to Upload"), FILE_SELECT_CODE);
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(getContext(), "Please install a File Manager.", Toast.LENGTH_SHORT).show();
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case FILE_SELECT_CODE:
if (resultCode == RESULT_OK) {
// Get the Uri of the selected file
Uri fileUri = data.getData();
long size = Helper.GetFileSize(getActivity(),fileUri);
File F = new File(fileUri.getPath());
Log.d("File", "File Uri: " + fileUri.toString());
FileInputStream fis;
try {
fis = new FileInputStream(new File(F.getPath()));
}
catch (Exception ex) {
ex.printStackTrace();
}
}
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
问题是路径包含了什么content://.... 而文件需要有一个实际的文件路径 尝试更新代码段中的此位:
Uri fileUri = data.getData();
String filePath = getPathFromUri(this,fileUri);
long size = Helper.GetFileSize(getActivity(),filePath);
File F = new File(filePath);
这就是帮助我们的方法
public String getPathFromURI(Context context, Uri contentUri) {
Cursor mediaCursor = null;
try {
String[] dataPath = { MediaStore.Images.Media.DATA };
mediaCursor = context.getContentResolver().query(contentUri, dataPath, null, null, null);
int column_index = mediaCursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
mediaCursor.moveToFirst();
return mediaCursor.getString(column_index);
} finally {
if (mediaCursor != null) {
mediaCursor.close();
}
}
}
问题是路径包含了什么content://.... 而文件需要有一个实际的文件路径 尝试更新代码段中的此位:
Uri fileUri = data.getData();
String filePath = getPathFromUri(this,fileUri);
long size = Helper.GetFileSize(getActivity(),filePath);
File F = new File(filePath);
这就是帮助我们的方法
public String getPathFromURI(Context context, Uri contentUri) {
Cursor mediaCursor = null;
try {
String[] dataPath = { MediaStore.Images.Media.DATA };
mediaCursor = context.getContentResolver().query(contentUri, dataPath, null, null, null);
int column_index = mediaCursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
mediaCursor.moveToFirst();
return mediaCursor.getString(column_index);
} finally {
if (mediaCursor != null) {
mediaCursor.close();
}
}
}
你想从Gallery加载吗?是的,我想从Gallery加载我已经更新了我的问题嗯,那么你必须使用内容解析器。对于另一个问题,我有类似的解决方案。我会发布答案。你想从Gallery加载吗?是的,我想从Gallery加载。我已经更新了我的问题。嗯,那么你必须使用内容解析器。对于另一个问题,我有类似的解决方案。将发布答案。GetPathFromUri总是返回null,我想可能是因为
数据路径
我不知道为什么。请帮助啊,你能粘贴分配给contentUri的值吗?我昨天解决了这个问题,我发现一个类可以处理所有类型的urihttps://github.com/iPaulPro/aFileChooser
GetPathFromUri总是返回null,我想可能是因为dataPath
我不知道为什么。请帮助啊,你能粘贴分配给contentUri的值吗?我昨天解决了这个问题,我发现一个类可以处理所有类型的urihttps://github.com/iPaulPro/aFileChooser