2

에서 열린 txt 파일 txt 파일을 선택하는 의도가 생성된다 - /storage/emulated/0/kote.txt안드로이드는 - - 어떤 버튼을 클릭하여 의도 선택기

하지만 그것에서 데이터를 읽을 때, 내가 할 FileNotFoundException이 :

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 
    if(requestCode==123 && resultCode==RESULT_OK) { 
     Uri selectedfile_uri = intent.getData(); 
     Log.e("TAG7", "selectedfile_uri --- " + selectedfile_uri); 

     File myFile_test1 = new File(selectedfile_uri.getPath()); 
     Log.e("TAG7", myFile_test1.getPath() + "  .exists() "+myFile_test1.exists()); 

     File myFile_test2 = new File(selectedfile_uri.getEncodedPath()); 
     Log.e("TAG7", myFile_test2.getPath() + "  .exists() "+myFile_test2.exists()); 

     function_read_txt_file(myFile_test1); //returns FileNotFoundException 
     function_read_txt_file(myFile_test2); //returns FileNotFoundException 
    } 
} 

로그 캣 :

,
E/TAG7: selectedfile_uri --- content://com.android.externalstorage.documents/document/primary%3Akote.txt 
E/TAG7: /document/primary:kote.txt  .exists() false 
E/TAG7: /document/primary%3Akote.txt  .exists() false 
E/TAG7: FileNotFoundException 

내가 여기에 있습니다. 건배

답변

2

Uri에는 파일에 대한 직접 액세스 할 수있는 경로가 없을 수도 있습니다. Uri

Uri selectedfile_uri = intent.getData(); 
InputStream inputStream = getContentResolver().openInputStream() 
+0

에서 InputStream을 열어 파일을 열어야합니다 ... 감사합니다 ... 감사합니다! 실제로 KitKat에 uri로 할 수 있습니다.하지만 지금은 롤리팝에서 해결책을 사용해야합니다. – Nikola

+0

기꺼이 도와 드리겠습니다. –

+1

@Nikola : "KitKat에서 uri로 할 수 있습니다." 그것은 모두 당신이 돌아 오는 '우리'에 달려 있습니다. 여러분의 코드는'Uri'가'file' 스키마를 가지고 있다고 가정합니다. Android의 모든 버전에서 해당 구성표가있을 필요는 없습니다. 'openInputStream()'은'file'과'content'를 지원합니다. – CommonsWare