web-dev-qa-db-fra.com

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

Je suis nouveau dans le développement Android.

J'ai besoin de lire un fichier texte de la carte SD et d'afficher ce fichier texte . Est-il possible d'afficher un fichier texte directement sous Android ou comment puis-je lire et afficher le contenu d'un fichier texte?

60
RSSS

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:

<TextView 
    Android:id="@+id/text_view" 
    Android:layout_width="fill_parent" 
    Android:layout_height="fill_parent"/>

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
StringBuilder text = new StringBuilder();

try {
    BufferedReader br = new BufferedReader(new FileReader(file));
    String 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 peut aller dans la méthode onCreate() de votre Activity, ou ailleurs, en fonction de ce que vous voulez faire.

120
Dave Webb

En réponse à 

Ne pas coder/sdcard /

Parfois, nous HAVE TO le coder en dur comme dans certains modèles de téléphone, la méthode API renvoie 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

6
Sibbs Gambling
BufferedReader br = null;
try {
        String fpath = Environment.getExternalStorageDirectory() + <your file name>;
        try {
            br = new BufferedReader(new FileReader(fpath));
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        }
        String line = "";
        while ((line = br.readLine()) != null) {
         //Do something here 
        }
1
RSH

Vous devez disposer de l'autorisation READ_EXTERNAL_STORAGE pour lire sdcard . Ajouter une autorisation dans manifest.xml.

<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />

À partir d'Android 6.0 ou plus récent, votre application doit demander à l'utilisateur d'accorder les autorisations dangereuses au moment de l'exécution. Veuillez vous référer à ce lien Aperçu des autorisations

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

Attention: certains téléphones ont 2 cartes SD, une 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 (élément: tous les fichiers), le dossier du dossier ouvert est "/ sdcard", une entrée "external-sd" est affichée, un clic sur celui-ci ouvre le dossier "/ sdcard/external_sd /" . Supposons que je souhaite ouvrir un fichier texte "MyBooks.txt". Je voudrais utiliser quelque chose comme: 

   String Filename = "/mnt/sdcard/external_sd/MyBooks.txt" ;
   File file = new File(fname);...etc...
0
eric stockman
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);
        String 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));
                StringBuilder textBuilder = new StringBuilder();
                String 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();
                    }
                }
            }

        }
    }
}
0
vikseln