2017-05-30 158 views
0

我希望用户选择一个文本文件,以便应用程序可以读取其内容。在onActivityResult我有以下代码:Android:从URI获取文本文件的路径会带来奇怪的路径

​​

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

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

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

+0

我没有解释但请参考:https://stackoverflow.com/questions/5568874/how-to-extract-the -file-name-from-uri-returned-from-intent-action-get-content –

+0

你应该看看filePath.toString()并且认识到它不是一个文件路径,而是一个带有内容方案的URI。使用内容方案而不是文件路径。 – greenapps

+0

'1EEB-0A13'是SD卡的USB标识符。放入一张不同的卡片,看看这个标识符是否改变。 – greenapps

回答

1

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

1EEB-0A13是SD卡的USB标识符。放入一张不同的卡片,看看这个标识符是否改变。

how to get the real path。不要试图做到这一点了。现代时代现在喜欢。使用uri打开一个InputStream是你想要读取的文件内容

1

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

不幸的是,你决定不显示你如何做这件事的代码。我假定您正在使用ACTION_GET_CONTENT,或者可能是ACTION_OPEN_DOCUMENT。这些都与文件无关。

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

getPath()只与一个file方案意为Uri。你有一个content方案,在这种情况下,“路径”是一系列不透明的字符,对你没有任何意义。

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

我几乎可以肯定的是它不会。对于初学者来说,并不是你从ACTION_GET_CONTENTACTION_OPEN_DOCUMENT得到的每个Uri看起来都是这样。用户可以有任何数量的响应ACTION_GET_CONTENT的应用程序以及插入ACTION_OPEN_DOCUMENT UI的任意数量的DocumentsProviders

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

而且它们都是有缺陷的垃圾。

使用ContentResolveropenInputStream()得到Uri标识的内容InputStream