2

durch Klick auf einige Taste - eine Absichtserklärung für txt-Datei auswählen wird erstellt:Android - Open txt-Datei von Intent Chooser

Intent intent = new Intent() 
        .setType("text/plain") 
        .setAction(Intent.ACTION_GET_CONTENT); 
      startActivityForResult(Intent.createChooser(intent, "Select a TXT file"), 123); 

Und es funktioniert OK - ich wählen TXT-Datei aus Stammordner auf Telefon internen Speicher - - /storage/emulated/0/kote.txt

Aber wenn ich versuche, Daten von ihm zu lesen, ich 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 
    } 
} 

logcat:

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 

Was fehlt mir hier? Prost

Antwort

2

Uri möglicherweise nicht den direkt zugänglichen Pfad zu Ihrer Datei. Sie sollten die Datei öffnen, indem die InputStream vom Uri

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

jetzt öffnen, es ist ok ... danke! eigentlich könnte ich das mit uri auf KitKat tun - aber jetzt auf Lollipop muss ich Ihre Lösung verwenden – Nikola

+0

Froh kann ich helfen :) –

+1

@Nikola: "Ich könnte das mit uri auf KitKat" - nicht wirklich. Es kommt auf den "Uri" an, den du zurück bekommst. Ihr Code geht davon aus, dass das 'Uri' ein 'Datei'-Schema hat. Es muss dieses Schema auf keiner Android-Version haben. 'openInputStream()' unterstützt 'file' und' content', die beiden wahrscheinlichsten 'Uri'-Schemata. – CommonsWare