java - 尝试从 Android 中的 uri 读取时出现文件未找到异常

标签 java android

我想从 uri 读取 fileInputStream,但它返回文件未找到异常

这是我到目前为止的代码:

 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://.... 而文件需要有一个实际的文件路径

尝试更新代码 fragment 中的这一点:

 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();
       }
   }
}

关于java - 尝试从 Android 中的 uri 读取时出现文件未找到异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39025943/

相关文章:

java - 为什么 Ant 会忽略 $HOME/.ant/lib/中的任务 jar

java - 有没有办法将 Android 应用程序连接到 OneDrive 或 Sharepoint 中的 Excel 数据源?

android - Android .aar依赖关系无法在依赖于.aar的应用程序项目中解决

java - 从 Java keystore 导出和上传 key 别名没有 key

android - 从android发送文件到nodejs时req.files未定义

android - 在 React Native 中确定是否在屏幕上绘制硬件按钮

java - 如何处理 PreparedStatement 中的(可能)空值?

java - 黄页抓取

java - 如何在 Hibernate 中修复 'A rollback database operation after a JUnit test'(没有 Spring)?

java - 在另一个 Controller 中重用 Spring 服务 Controller 功能