как читать строку за строкой в android?


Я использую этот код.

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();

Но это показывает исключение и не обновляет temp1 и temp2.

4 2

4 ответа:

Исключение, которое вы видите, - что я настоятельно рекомендую а) перехватывать как определенный тип, например IOException, и Б) регистрировать или показывать с сообщением или трассировкой стека, и в) по крайней мере проверять в LogCat, с точки зрения DDMS, если вы программируете с Eclipse, - вероятно, связано с тем, что Android не находит файл config.txt, который вы пытаетесь открыть. Обычно в самых простых случаях, таких как ваш, файлы, которые являются частными для приложения, открываются с помощью openFileInput - смотрите документацию для подробности.

Кроме исключения, ваш цикл чтения неисправен: вам нужно инициализировать пустую строку перед вводом и заполнить ее в условии while.

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

Однако вам не нужен цикл, если вы просто хотите сохранить первые две строки в разных переменных.

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

Как уже указывали другие, вызов readLine потребляет строку, поэтому, если ваш файл config.txt содержит только одну строку, ваш код потребляет ее по условию while, то temp1 и temp2 получают null назначено, потому что больше нет текста для чтения.

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();

Бр.readLine() в while уже потребляет строку.

Попробуйте это

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

Если вы хотите сохранить первые две строки, вы должны сделать:

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