как читать построчно в Android? - PullRequest
2 голосов
/ 28 октября 2011

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

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 ]

7 голосов
/ 28 октября 2011

Исключение, которое вы видите - я бы настоятельно рекомендовал а) отлавливать как определенный тип, например IOException, и b) для регистрации или показа с помощью сообщения или трассировки стека, и c) по крайней мере, для проверки в 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 get null назначено, потому что больше нет текста для чтения.

1 голос
/ 28 октября 2011

br.readLine () в то время как уже занимает строку.

1 голос
/ 28 октября 2011
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();
0 голосов
/ 28 октября 2011

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

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