3 votes

comment lire ligne par ligne dans Android ?

J'utilise ce code.

try{
          // Open the file that is the first 
          // command line parameter
          FileInputStream fstream = new FileInputStream("config.txt");
          // Get the object of DataInputStream
          DataInputStream in = new DataInputStream(fstream);
          BufferedReader br = new BufferedReader(new InputStreamReader(in));
          while ((br.readLine()) != null) {
              temp1 = br.readLine();
              temp2 = br.readLine();

          }

          in.close();
    }catch (Exception e){//Catch exception if any
    Toast.makeText(getBaseContext(), "Exception", Toast.LENGTH_LONG).show();
    }
    Toast.makeText(getBaseContext(), temp1+temp2, Toast.LENGTH_LONG).show();

mais cela montre une exception et ne met pas à jour temp1 et temp2.

9voto

Giulio Piancastelli Points 4537

L'exception que vous voyez - que je recommanderais fortement a) d'attraper comme un type spécifique, par exemple IOException et b) à consigner ou à afficher avec un message ou une trace de pile, et c) au moins à vérifier dans LogCat, du point de vue du DDMS si vous programmez avec Eclipse - est probablement due au fait qu'Android ne trouve pas l'option config.txt le fichier que vous essayez d'ouvrir. Habituellement, pour les cas les plus simples comme le vôtre, les fichiers privés d'une application sont ouverts à l'aide de la commande openFileInput - voir la documentation pour les détails.

En dehors de l'exception, votre boucle de lecture est défectueuse : vous devez initialiser une chaîne vide avant d'entrer, et la remplir dans le champ while condition.

String line = "";
while ((line = br.readLine()) != null) {
    // do something with the line you just read, e.g.
    temp1 = line;
    temp2 = line;
}

Cependant, vous n'avez pas besoin d'une boucle si vous voulez simplement enregistrer les deux premières lignes dans des variables différentes.

String line = "";
if ((line = br.readLine()) != null)
    temp1 = line;
if ((line = br.readLine()) != null)
    temp2 = line;

Comme d'autres l'ont déjà souligné, appeler readLine consomme une ligne, donc si votre config.txt ne contient qu'une seule ligne, votre code la consomme sur la page d'accueil. while la condition, alors temp1 y temp2 obtenir null assigné parce qu'il n'y a plus de texte à lire.

1voto

Carnal Points 7150
try{
      // Open the file that is the first 
      // command line parameter
      FileInputStream fstream = new FileInputStream("config.txt");
      // Get the object of DataInputStream
      DataInputStream in = new DataInputStream(fstream);
      BufferedReader br = new BufferedReader(new InputStreamReader(in));
      String line = "";
      while ((line = br.readLine()) != null) {
          temp1 = line;
          temp2 = line;

      }

      in.close();
}catch (Exception e){//Catch exception if any
Toast.makeText(getBaseContext(), "Exception", Toast.LENGTH_LONG).show();
}
Toast.makeText(getBaseContext(), temp1+temp2, Toast.LENGTH_LONG).show();

1voto

herrlado Points 86

Br.readLine() dans while consomme déjà une ligne.

Essayez ceci

    LineNumberReader reader = new LineNumberReader(new FileReader("config.txt")));
    String line;
    while ((line = reader.readLine()) != null) {
        //doProcessLine
    }

0voto

SERPRO Points 5825

Si vous voulez sauvegarder les deux premières lignes, vous devez le faire :

try
{
    // Open the file that is the first
    // command line parameter
    FileInputStream fstream = new FileInputStream("config.txt");
    // Get the object of DataInputStream
    DataInputStream in = new DataInputStream(fstream);
    BufferedReader br = new BufferedReader(new InputStreamReader(in));
    String line = "";
    if((line = br.readLine()) != null)
        temp1 = line;
    if((line = br.readLine()) != null)
        temp2 = line;   
}
catch(Exception e)
{
    e.printStackTrace();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X