web-dev-qa-db-fra.com

Comment lire un fichier ligne par ligne

J'ai un fichier contenant du texte sur une ligne distincte.
Je veux d'abord afficher la ligne, puis si j'appuie sur un bouton, la deuxième ligne devrait s'afficher dans le TextView et la première ligne devrait disparaître. Ensuite, si j'appuie à nouveau, la troisième ligne devrait s'afficher et ainsi de suite.

Dois-je utiliser TextSwitcher ou autre chose? Comment puis je faire ça?

18
Sunny

Vous l'avez marqué comme "Android-assets", je vais donc supposer que votre fichier se trouve dans le dossier des actifs. Ici:

InputStream in;
BufferedReader reader;
String line;
TextView text;

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    text = (TextView) findViewById(R.id.textView1);
    in = this.getAssets().open(<your file>);
    reader = new BufferedReader(new InputStreamReader(in));
    line = reader.readLine();

    text.setText(line);
    Button next = (Button) findViewById(R.id.button1);
    next.setOnClickListener(this);
}

public void onClick(View v){
    line = reader.readLine();
    if (line != null){
        text.setText(line);
    } else {
        //you may want to close the file now since there's nothing more to be done here.
    }
}

Essayez ceci. Je n'ai pas pu vérifier que cela fonctionne complètement, mais je pense que c'est l'idée générale que vous souhaitez suivre. Naturellement, vous voudrez remplacer tout R.id.textView1/button1 avec les noms que vous avez spécifiés dans votre fichier de mise en page.

Aussi: Il y a très peu d'erreur de vérification ici pour des raisons d'espace. Vous voudrez vérifier que votre actif existe et je suis quasiment sûr qu'il devrait y avoir un try/catch bloquer lorsque vous ouvrez le fichier en lecture.

Edit: grosse erreur, ce n'est pas R.layout, c'est R.id J'ai modifié ma réponse pour résoudre le problème.

31
Otra

Le code suivant devrait répondre à votre besoin

try {
// open the file for reading
InputStream instream = new FileInputStream("myfilename.txt");

// if file the available for reading
if (instream != null) {
  // prepare the file for reading
  InputStreamReader inputreader = new InputStreamReader(instream);
  BufferedReader buffreader = new BufferedReader(inputreader);

  String line;

  // read every line of the file into the line-variable, on line at the time
  do {
     line = buffreader.readLine();
    // do something with the line 
  } while (line != null);

}
} catch (Exception ex) {
    // print stack trace.
} finally {
// close the file.
instream.close();
}
15
Ronnie

Vous pouvez simplement utiliser un TextView et un ButtonView. Lisez le fichier à l'aide d'un BufferedReader, il vous fournira une belle API pour lire les lignes une par une. En cliquant sur le bouton, changez simplement le texte de la vue de texte en utilisant settext.

Vous pouvez également envisager de lire tout le contenu du fichier et de le mettre dans une liste de chaînes, cela peut être plus propre si votre fichier n'est pas trop volumineux.

Cordialement, Stéphane

0
Snicolas