2016-09-05 7 views
0

次のコードは、ユーザーがファイルを選択できるように、ファイルマネージャを起動するために使用されます。選択したファイルの親パスが使用できないのはなぜですか?

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.addCategory(Intent.CATEGORY_OPENABLE); 
intent.setType("*/*"); 
startActivityForResult(intent, REQUEST_CODE_CUSTOM_FOLDER); 

ユーザーがフォルダでダウンロードファイルfoo.txtのを選択した場合、返されたファイルのパスが

/document/2071-13DB:Download/foo.txt 
です

このファイルを読み取る際に問題はありません。アプリがフォルダにテキストファイル(foo_new.txt)を書き込もうとすると「/文書/ 2071-13DBを:ダウンロード」、それは次の例外を取得します:

Error:Directory '/document/2071-13DB:Download' could not be created. 

誰もがこの上でいくつかの光を当てますか?私は、ユーザーがファイルを保存するためのアプリのフォルダを選択できるようにしようとしています。

答えて

1

次のコードは、ユーザーがファイル

ないを選択することができるように、ファイルマネージャを起動するために使用され、そうではありません。これは、その特定のIntent構造をサポートするすべてのアクティビティから、コンテンツを取得するために使用されます。ユーザーがフォルダでダウンロードファイルfoo.txtのを選択した場合は、ファイルを取得されていません

、返されたファイルのパスです。あなたはコンテンツにUriを取得しています。特に、私はこのUricontentスキームがあることを強く疑う。その場合、パスは無意味です。

アプリをフォルダにテキストファイル(foo_new.txt)を書き込もうとする「/文書/ 2071-13DBを:ダウンロード」、それはフォルダではありません次の例外

を取得します。あなたの立場から言えば、それはランダムな一連の文字です。

たとえば、このWebページのURLはhttps://stackoverflow.com/questions/39337012/why-is-the-parent-path-of-a-selected-file-not-usableです。 HTTPクライアントを使用して、そのページの内容を読み取ることができます。ただし、JavaのFileオブジェクトを使用して、コンピュータ上の/questions/39337012/に新しいファイルを書き込もうとすると、コンピュータに/questions/39337012/フォルダがないため、これは機能しません。ここで、URLはあなたのコンピュータのファイルシステムにないコンテンツを指しています。

同様に、Uriの部分の文字列操作を実行することはできず、別のUriを使用することができます。 Uriは、ファイルシステム上のファイルを指す必要はありません。

私は、ユーザーがファイルを保存するためのアプリのフォルダを選択できるようにしようとしています。

a directory-chooser libraryを使用します。

また、Android 5.0以降のデバイスでは、ストレージアクセスフレームワークの一部であるACTION_OPEN_DOCUMENT_TREEを使用してください。そこから、DocumentFileを使用して新しいフォルダを作成し、それらのフォルダに新しいコンテンツを作成します。すべてUriの値を使用して、Uriの値(例えば、getPath())の部分を解読しようとすることはありません。

+0

迅速な解明に感謝します。アプリケーションがファイルパスを取得する方法は次のとおりです。intentData.getData()。getPath()ここで、intentDataはonActivityResult(int requestCode、int resultCode、Intent intentData)です。 – Hong

+1

@Hong:これもファイルパスではなく、 '/ questions/39337012 /なぜ親ファイルの選択パスが使用できないのか'はファイルパスです。 'Uri'のスキームが' file'だった場合、 'getPath()' *はファイルパスを返しますが、おそらく便利なものではありません(例えば、リムーバブルストレージ上のものを指します)。 – CommonsWare

+0

再度ご確認いただきありがとうございます。 URIは次のとおりです。content://com.android.externalstorage.documents/document/2071-13DB%3ADownload%2Ffoo.txt – Hong

関連する問題