Comment lire un fichier texte de la carte SD sous Android?

Je suis nouveau sur le développement Android.

Je dois lire un fichier texte à partir de la carte SD et afficher ce fichier texte. Existe-t-il un moyen de visualiser un fichier texte directement dans Android ou comment puis-je lire et afficher le contenu d’un fichier texte?

Dans votre mise en page, vous aurez besoin de quelque chose pour afficher le texte. Un TextView est le choix évident. Donc, vous aurez quelque chose comme ça:

  

Et votre code ressemblera à ceci:

 //Find the directory for the SD Card using the API //*Don't* hardcode "/sdcard" File sdcard = Environment.getExternalStorageDirectory(); //Get the text file File file = new File(sdcard,"file.txt"); //Read text from file SsortingngBuilder text = new SsortingngBuilder(); try { BufferedReader br = new BufferedReader(new FileReader(file)); Ssortingng line; while ((line = br.readLine()) != null) { text.append(line); text.append('\n'); } br.close(); } catch (IOException e) { //You'll need to add proper error handling here } //Find the view by its id TextView tv = (TextView)findViewById(R.id.text_view); //Set the text tv.setText(text); 

Cela pourrait aller dans la méthode onCreate() de votre Activity , ou ailleurs selon ce que vous voulez faire.

En réponse à

Ne pas hardcode / sdcard /

Nous devons parfois le coder en dur comme dans certains modèles de téléphone, la méthode API retourne la mémoire interne du téléphone.

Types connus: HTC One X et Samsung S3.

Environment.getExternalStorageDirectory (). GetAbsolutePath () donne un chemin différent – Android

 BufferedReader br = null; try { Ssortingng fpath = Environment.getExternalStorageDirectory() + ; try { br = new BufferedReader(new FileReader(fpath)); } catch (FileNotFoundException e1) { e1.printStackTrace(); } Ssortingng line = ""; while ((line = br.readLine()) != null) { //Do something here } 
 package com.example.readfilefromexternalresource; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import android.app.Activity; import android.app.ActionBar; import android.app.Fragment; import android.os.Bundle; import android.os.Environment; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; import android.os.Build; public class MainActivity extends Activity { private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.main); textView = (TextView)findViewById(R.id.textView); Ssortingng state = Environment.getExternalStorageState(); if (!(state.equals(Environment.MEDIA_MOUNTED))) { Toast.makeText(this, "There is no any sd card", Toast.LENGTH_LONG).show(); } else { BufferedReader reader = null; try { Toast.makeText(this, "Sd card available", Toast.LENGTH_LONG).show(); File file = Environment.getExternalStorageDirectory(); File textFile = new File(file.getAbsolutePath()+File.separator + "chapter.xml"); reader = new BufferedReader(new FileReader(textFile)); SsortingngBuilder textBuilder = new SsortingngBuilder(); Ssortingng line; while((line = reader.readLine()) != null) { textBuilder.append(line); textBuilder.append("\n"); } textView.setText(textBuilder); } catch (FileNotFoundException e) { // TODO: handle exception e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ if(reader != null){ try { reader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } } 

Attention: certains téléphones ont 2 cartes SD, un carte interne fixe et une carte amovible. Vous pouvez trouver le nom du dernier via une application standard: “Mijn Bestanden” (en anglais: “MyFiles”?) Lorsque j’ouvre cette application (item: all files), le chemin du dossier ouvert est “/ sdcard”, en faisant défiler, il y a une entrée “external-sd”, en cliquant dessus, vous ouvrez le dossier “/ sdcard / external_sd /”. Supposons que je veuille ouvrir un fichier texte “MyBooks.txt”. J’utiliserais quelque chose comme:

  Ssortingng Filename = "/mnt/sdcard/external_sd/MyBooks.txt" ; File file = new File(fname);...etc... 

Vous devez avoir l’autorisation READ_EXTERNAL_STORAGE pour lire la carte SD. Ajouter une autorisation dans manifest.xml

  

Depuis Android 6.0 ou version ultérieure, votre application doit demander à l’utilisateur d’accorder les permissions dangereuses au moment de l’exécution. Veuillez vous référer à ce lien

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new Ssortingng[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0); } }