2017-05-30 81 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