我希望用户选择一个文本文件,以便应用可以阅读其内容。在onActivityResult中我有以下代码:
Uri filePath = data.getData();
File file = new File(filePath.getPath());
filePath.getPath()带来了这个奇怪的路径:/ document / ** 1EEB-0A13:** Download / filename.txt
我不明白什么是1EEB-0A13:我几乎可以肯定没有它,它会起作用。不用说,我得到一个例外,即没有这样的文件或目录。
我看到很多关于如何获得真实路径的例子,但它们似乎与图像有关。我试过其中一个,但它抛出异常。
答案 0 :(得分:1)
我希望用户选择一个文本文件,以便应用可以阅读其内容。
不幸的是,您决定不显示您如何执行此操作的代码。我将假设您使用的是ACTION_GET_CONTENT
,或者ACTION_OPEN_DOCUMENT
。这些都与文件无关。
filePath.getPath()带来了这个奇怪的路径:/ document / ** 1EEB-0A13:** Download / filename.txt
getPath()
仅对具有Uri
方案的file
有意义。你的方案有content
,在这种情况下,"路径"是一系列不透明的人物,对你没有任何意义。
我几乎可以肯定,如果没有它,它会起作用
我几乎可以肯定它不会。对于初学者而言,并非您从Uri
或ACTION_GET_CONTENT
获得的每个ACTION_OPEN_DOCUMENT
都是这样的。用户可以拥有响应ACTION_GET_CONTENT
的任意数量的应用,以及插入DocumentsProviders
用户界面的任意数量的ACTION_OPEN_DOCUMENT
。
我看到很多关于如何获得真实路径的例子,但它们似乎与图像有关。
而且它们都是垃圾碎片。
使用ContentResolver
和openInputStream()
获取InputStream
标识的内容的Uri
。
答案 1 :(得分:1)
您应该查看filePath.toString()
并意识到它不是文件路径,而是具有内容方案的uri。使用内容方案而不是文件路径。
1EEB-0A13
是SD卡的USB标识符。放入另一张卡片,看看此标识符发生了变化。
how to get the real path
。别再试着这样做了。现代人现在很乐意。使用uri打开一个InputStream是否要读取文件的内容