2016-07-28 12 views
1

Ich versuche, die Adresse jeder Datei auf Android und dann lesen Sie den Inhalt.Datei nicht gefunden Ausnahme in Android, aber Datei existiert

Ich erhalte die Lage der Datei:

uri2.toString() gives string "file:///storage/emulated/0/download/user.txt" 

uri2.getEndodedPath() gives string "/storage/emulated/0/download/user.txt" 

wenn diese Werte übergeben Sie gibt Datei nicht Ausnahme

Hinweis gefunden Datei: Ich bin nicht Datei aus sdcard oder Asset-Ordner zu lesen oder raw Ordner und ich auf mobilen eine meiner app mich entschieden und CyanogenMod

hier ist mein android-Code

import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.nfc.Tag; 
import android.speech.tts.TextToSpeech; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.Locale; 


public class MainSpeechActivity extends Activity { 

    TextToSpeech tts; 
    Button btn; 
    private String uri; 
    private Uri uri2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main_speech); 


     final Intent intent = getIntent(); 
     final String action = intent.getAction(); 

     if(Intent.ACTION_VIEW.equals(action)){ 
      //uri = intent.getStringExtra("URI"); 
      uri2 = intent.getData(); 
      uri = uri2.getEncodedPath() + " complete: " + uri2.toString(); 
      TextView textView = (TextView)findViewById(R.id.textView); 
      TextView textView2 = (TextView)findViewById(R.id.textView2); 
      textView.setText(uri); 
      // now you call whatever function your app uses 

      String str = uri2.toString();// value is mentioned above 
      File f = new File(str); 
      BufferedReader br = null; 
      String line; 
      StringBuilder sbr = new StringBuilder(); 

      try { 
       br = new BufferedReader(new InputStreamReader(new FileInputStream(f))); 
       while((line = br.readLine()) != null) { 
        sbr.append(line); 
        sbr.append("\n"); 

       } 
       br.close(); 
      } catch (FileNotFoundException e) { 
       Toast.makeText(getApplicationContext(),"FileNotFound",Toast.LENGTH_SHORT).show(); 
       e.printStackTrace(); 
      } catch (IOException e) { 
       Toast.makeText(getApplicationContext(),"InputError",Toast.LENGTH_SHORT).show(); 
       e.printStackTrace(); 
      } 
      if(sbr.toString().isEmpty()) 
       textView2.setText("Blah blah"); 
      else 
      textView2.setText(sbr.toString()); 




     } else { 
      Log.d("know", "intent was something else: " + action); 
     } 

     tts = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() { 
      @Override 
      public void onInit(int i) { 
       if(i != TextToSpeech.ERROR) { 
        tts.setLanguage(Locale.ENGLISH); 
       } 
      } 
     }); 

     btn = (Button)findViewById(R.id.button1); 

     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       String toSpeak = "My friend is very good programmer do you aggree"; 

       Toast.makeText(getApplicationContext(),toSpeak,Toast.LENGTH_SHORT).show(); 

       tts.speak(toSpeak,TextToSpeech.QUEUE_FLUSH,null); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main_speech, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

Wenn von Android-Datei zu lesen nicht möglich ist, dann, wie diese Datei auf der SD-Karte zu kopieren oder an der Stelle, wo das Lesen und Schreiben möglich ist

Antwort

0

Ich versuche, die Adresse einer beliebigen Datei auf Android zu bekommen und dann lies seinen Inhalt.

ich Datei aus sdcard bin nicht

Lesen

Dann sind Ihre Möglichkeiten ziemlich begrenzt. Sie können eine Datei nur aus dem internen Speicher lesen, wenn Ihre App auf diesen Teil des internen Speichers zugreifen darf.


Allerdings, da Sie versuchen, von Downloads zu lesen, sollte es in Ordnung sein. Ich denke, das Problem ist der Dateipfad schlecht formatiert ist:

file:///storage/emulated/0/download/user.txt 

Sollte nur sein

/storage/emulated/0/download/user.txt 

, die Sie den Wert haben, müssen Sie nur geben Sie Ihre str Variable getEncodedPath statt toString

+0

str.getEncodedPath() funktioniert nicht –

+0

Problem gelöst muss nur entsprechende in android manifest.xml geben. ich erinnere mich jetzt nicht. –