2017-05-28 61 views
0

我正在開發一個應用程序,允許用戶創建備份文件,然後使用文件選擇器重新導入它們。我使用下面的代碼導出文件:Android:將URI轉換爲文件

Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT); 
intent.setType("application/*"); 
startActivityForResult(intent, Constants.FILE_CHOOSER); 

的代碼返回onActivityResult()一個URI:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode == Constants.FILE_CHOOSER) { 
     Uri uri = data.getData(); 
    } 

我有一個File引用包含數據的我的應用程序的本地存儲中的文件。我只想從應用程序的內部存儲中取出文件並將其保存到用戶選擇的任何目錄中。我無法讓它工作。如何將返回的Uri轉換爲File,以便我可以更輕鬆地寫入數據?

回答

1

我只是想採取從應用程序的內部存儲的文件並將其保存到任何目錄用戶選擇

用戶沒有選擇一個目錄。用戶正在創建一個文檔,其中Uri指向該文檔。

如何將返回的Uri轉換爲文件以便我可以更輕鬆地寫入數據?

除了將HTTPS URL轉換爲File之外,您不需要做任何事情,因此您可以更輕鬆地寫入數據。

使用ContentResolveropenOutputStream()打開由ACTION_CREATE_DOCUMENT創造和識別由返回Uri(空)文件的OutputStream。然後,使用標準Java I/O將文件中的字節(例如,通過FileInputStream)複製到OutputStream

+0

你有一些示例語法或一個很好的資源來看?我似乎無法在Android開發者頁面上找到任何信息。 – wdavies973

+0

@ wdavies973:爲了什麼? 'ContentResolver'是一個Java類。您通常通過調用Context等'getContentResolver()'來獲得它的一個實例,比如您的活動。 'openOutputStream()'是'ContentResolver'上的一個方法。你傳入'Uri'作爲參數。你得到一個'OutputStream'。所以,合併,即getContentResolver()。openOutputStream(data.getData())'。 – CommonsWare

+0

謝謝,這就是我所需要的。感謝你的幫助。 – wdavies973