Android:从URI获取文本文件的路径带来了一个奇怪的路径

时间:2017-05-30 11:52:57

标签: android uri

我希望用户选择一个文本文件,以便应用可以阅读其内容。在onActivityResult中我有以下代码:

Uri filePath = data.getData();
File file = new File(filePath.getPath());

filePath.getPath()带来了这个奇怪的路径:/ document / ** 1EEB-0A13:** Download / filename.txt

我不明白什么是1EEB-0A13:我几乎可以肯定没有它,它会起作用。不用说,我得到一个例外,即没有这样的文件或目录。

我看到很多关于如何获得真实路径的例子,但它们似乎与图像有关。我试过其中一个,但它抛出异常。

2 个答案:

答案 0 :(得分:1)

  

我希望用户选择一个文本文件,以便应用可以阅读其内容。

不幸的是,您决定不显示您如何执行此操作的代码。我将假设您使用的是ACTION_GET_CONTENT,或者ACTION_OPEN_DOCUMENT。这些都与文件无关。

  

filePath.getPath()带来了这个奇怪的路径:/ document / ** 1EEB-0A13:** Download / filename.txt

getPath()仅对具有Uri方案的file有意义。你的方案有content,在这种情况下,"路径"是一系列不透明的人物,对你没有任何意义。

  

我几乎可以肯定,如果没有它,它会起作用

我几乎可以肯定它不会。对于初学者而言,并非您从UriACTION_GET_CONTENT获得的每个ACTION_OPEN_DOCUMENT都是这样的。用户可以拥有响应ACTION_GET_CONTENT的任意数量的应用,以及插入DocumentsProviders用户界面的任意数量的ACTION_OPEN_DOCUMENT

  

我看到很多关于如何获得真实路径的例子,但它们似乎与图像有关。

而且它们都是垃圾碎片。

使用ContentResolveropenInputStream()获取InputStream标识的内容的Uri

答案 1 :(得分:1)

您应该查看filePath.toString()并意识到它不是文件路径,而是具有内容方案的uri。使用内容方案而不是文件路径。

1EEB-0A13是SD卡的USB标识符。放入另一张卡片,看看此标识符发生了变化。

how to get the real path。别再试着这样做了。现代人现在很乐意。使用uri打开一个InputStream是否要读取文件的内容