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?
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.
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
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
}
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);
}
}
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...
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();
}
}
}
}
}
}