2016-12-10 5 views
2

上の任意の場所からファイルを.txtでは:読むが、私は、ユーザーがファイルを選択できるように、このコードを持っている私のアプリでは携帯電話

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("text/plain"); 
startActivityForResult(intent,1); 

ユーザーがさえから、どこか彼の電話での.txtファイルを選択することができますグーグルドライブ。ファイルの選択が完了すると、そのファイルに対応するUriオブジェクトを取得します。問題は、それが有効でないためにこのUriをファイルの読み込みに使用できないことです。ここに私のコードです:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      if (requestCode == 1) { 
       if (resultCode == RESULT_OK) { 
        Uri uri = data.getData(); 

        File file = new File(uri.toString()); 

        try{ 
         InputStream inputStream = new FileInputStream(file); 
         int content; 
         while ((content = inputStream.read()) != -1) { 
          Log.d("===>", String.valueOf((char) content)); 
         } 
        }catch (Exception e){ 
         Log.d("===>", e.toString()); 
        } 

       } 
      } 
     } 

私はいつもfileNotFoundExceptionを取得します。私の質問は、選択されたファイルを読み込む方法があるかどうかです(あらかじめその場所がわからなくても)。それ以外の場合は、選択したファイルを簡単に入手できるフォルダにコピーする方法がありますか?

答えて

3

問題は、このUriを使用してファイルを読み取ることができないためです。有効ではないためです。

これは、Uriがファイルではないためです。

(事前に、それはから来る場所を知らなくても)、選択したファイルを読み込む方法はあり

ユーザーがファイルを選択しませんでした。ユーザーがコンテンツを選択しました。

Uriで表されるコンテンツを使用するには、ContentResolveropenInputStream()と呼び出し、Uriを渡します。これにより、コンテンツの読み込みに使用できるInputStreamが得られます。

+0

私はちょうどcontentProviderのドキュメントを見ていました。正に、私は何をすべきか分かりません。私はcontentProviderクラスから拡張するクラスを作成する必要がありますか? – Mtoypc

+0

@Metypc:申し訳ありません、私は 'ContentResolver'を意味しました - 私は自分の答えを修正しました。 'Activity'のような便利な' Context'で 'getContentResolver()'を呼び出してください。次に、 'ContentResolver'で' openInputStream() 'を呼び出します。 – CommonsWare

+0

ありがとう、あなたは今日私を2回救った – Mtoypc

関連する問題