java - uri 获取错误的文件路径

标签 java android

我正在尝试获取文件的路径以便读取它。

这是当我单击按钮时使用当前 View 启动 OnBrowse() 的代码:

public void onBrowse(View view) {
        Intent chooseFile;
        Intent intent;
        chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
        chooseFile.addCategory(Intent.CATEGORY_OPENABLE);
        chooseFile.setType("*/*");
        intent = Intent.createChooser(chooseFile, "Choose a file");
        startActivityForResult(intent, ACTIVITY_CHOOSE_FILE);
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode != RESULT_OK) return;
        String path     = "";
        if(requestCode == ACTIVITY_CHOOSE_FILE)
        {
            Uri uri = data.getData();
            Log.d("Path", ""+uri);
            File myFile = new File(uri.getPath());
            myFile.getAbsolutePath();
            loadFile(myFile.getAbsolutePath());
        }
    }

    public String getRealPathFromURI(Uri contentUri) {
        String [] proj      = {MediaStore.Images.Media.DATA};
        Cursor cursor       = getContentResolver().query( contentUri, proj, null, null,null);
        if (cursor == null) return null;
        int column_index    = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }

不,一切正常,但是 myFile.getAbsolutePath() 给了我以下路径:

/document/raw:/storage/emulated/0/Download/File.txt

当我认为它应该只返回storage/emulated/0/Download/File.txt

因此,当我尝试读取该文件时,它会抛出异常。

谢谢

最佳答案

如果您只想读取 uri 的内容,那么使用输入流而不是文件要容易得多。无需翻译为文件。这也适用于 http 和 ftp uri-s

InputStream in = getContentResolver().openInputStream(uri);
loadFromInputStream(in);

详情参见 sdk ContentResolver#openInputStream(uri)

关于java - uri 获取错误的文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45854657/

相关文章:

android - v7 RecyclerView NullPointerException AccessibilityDelegateCompat.getBridge()

android下载管理器下载文件一次

android - Google map API - 签名无效

java - C++键盘键码和JAVA KeyEvent键码之间的区别

android - 如何在调用期间取消 AsyncTask?

java - 本地无状态 EJB 与远程 EJB

java - Spring MVC @ModelAttribute 不适用于用户定义的依赖项

java - android.os.BinderProxy 无法转换为 org.eclipse.paho.android.service.MqttServiceBinder

java - 使用 Java 和 Apache POI 从 Excel 读取整数数据时避免小数点

java - 更改模拟器屏幕分辨率?