как читать строку за строкой в 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 ответа:
Исключение, которое вы видите, - что я настоятельно рекомендую а) перехватывать как определенный тип, например
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(); }