Android 从手机上的任何位置读取.txt文件

Android 从手机上的任何位置读取.txt文件,android,Android,在我的应用程序中,我有以下代码,允许用户选择文件: Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("text/plain"); startActivityForResult(intent,1); 用户可以从手机的任何地方选择.txt文件,甚至可以从谷歌硬盘上选择。完成文件选择后,我检索与该文件对应的Uri对象。问题是我无法使用此Uri读取文件,因为它无效。这是我的密码: @Override prote

在我的应用程序中,我有以下代码,允许用户选择文件:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("text/plain");
startActivityForResult(intent,1);
用户可以从手机的任何地方选择.txt文件,甚至可以从谷歌硬盘上选择。完成文件选择后,我检索与该文件对应的Uri对象。问题是我无法使用此Uri读取文件,因为它无效。这是我的密码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == 1) {
                if (resultCode == RESULT_OK) {
                    Uri uri = data.getData();

                    File file = new File(uri.toString());

                    try{
                        InputStream inputStream = new FileInputStream(file);
                        int content;
                        while ((content = inputStream.read()) != -1) {
                            Log.d("===>", String.valueOf((char) content));
                        }
                    }catch (Exception e){
                        Log.d("===>", e.toString());
                    }

                }
            }
        }
我总是得到一个fileNotFoundException。我的问题是,有没有一种方法可以读取所选文件(而不事先知道它将来自何处)。如果没有,是否有办法将所选文件复制到一个我可以轻松获取的文件夹中

问题是我无法使用此Uri读取文件,因为它无效

这是因为
Uri
不是文件

是否有办法读取所选文件(不事先知道文件的来源)

用户没有选择文件。用户选择了一段内容


要使用
Uri
表示的内容,请在
ContentResolver
上调用
openInputStream()
,传入
Uri
。这将为您提供一个
InputStream
,您可以使用它来读取内容。

我刚刚查看了contentProvider文档,说实话,我不太明白我应该做什么。我应该创建一个从contentProvider类扩展而来的类吗?@Mtoypc:对不起,我的意思是
ContentResolver
——我已经修复了我的答案。在任何方便的
上下文
上调用
getContentResolver()
,例如
活动
。然后,在
ContentResolver
上调用
openInputStream()
。非常感谢,您今天救了我两次