Як прочитати лінію за ієрогліфом?

Я використовую цей код.

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.

2
ви хочете зберегти ту ж лінію в двох різних змінних? або ви просто хочете зберегти останні 2 рядків у temp1 і temp2?
додано Автор SERPRO, джерело
хочу зберегти перші два рядки файлів у двох різних змінних.
додано Автор xkrlaix, джерело

4 Відповіді

Виняток, який ви бачите - я б настійно рекомендував a) ловити як певний тип, наприклад IOException і б) зареєструвати або показати з повідомленням або трасою стека; і 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 condition, потім temp1 і temp2 отримаєте null , оскільки більше немає тексту для читання.

7
додано
Як видно з документації, пов'язаної в моїй відповіді, openFileInput - це метод Context , який похідний від Activity . Таким чином, якщо ви використовуєте фрагмент в активності, openFileInput має бути вже доступним для вас. В іншому випадку ви повинні передавати екземпляр Context в метод або клас, де ви хочете прочитати файл.
додано Автор Giulio Piancastelli, джерело
Я використовую цей FileInputStream fstream = новий openFileInput ("config.txt"); але його не працює. він не може вирішити проблему openfileInput.
додано Автор xkrlaix, джерело
Дякую. він справді працював.
додано Автор xkrlaix, джерело
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();
1
додано

br.readLine() в той час, як вже споживає рядок.

Спробуйте це

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

якщо ви хочете зберегти перші два рядки, які потрібно виконати:

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();
}
0
додано
В порядку. Це ще одна проблема. у всякому разі, цей код - це те, що вам потрібно, щоб отримати перші 2 рядки файлу (коли він існує). :)
додано Автор SERPRO, джерело
насправді виявляє виняток, оскільки не може знайти "config.txt". але якщо я використовую "FileInputStream fstream = new openFileInput (" config.txt ");" тоді її не визнають.
додано Автор xkrlaix, джерело
так, вони існують насправді. Я бачив їх окремо.
додано Автор xkrlaix, джерело
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників

android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.