Android: не удается прочитать из файла с помощью FileInputStream - PullRequest
5 голосов
/ 26 марта 2012

Я пытаюсь прочитать из файла с именем "quiz_questions.txt" в моей папке res / raw. У меня есть код, который компилируется, но, похоже, он останавливается, прежде чем попадает в FileInputStream. Возможно это открывает это, но не читает это. Я не уверен.

import java.io.*;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;

public class Questions extends Activity {

public String[][] questions = new String[10][5];

public void fillArray() {
    {
        Context con = null;
        try {
            //fis = new BufferedInputStream(new FileInputStream("res/raw/quiz_questions.txt"));
            FileInputStream fis = (FileInputStream) con.getResources().openRawResource(R.raw.quiz_questions);
            BufferedReader br = new BufferedReader(new InputStreamReader(fis));
            String nextLine;
            int i = 0, j = 0;
            while ((nextLine = br.readLine()) != null) {
                if (j == 5) {
                    j = 0;
                    i++;
                }
                questions[i][j] = nextLine;
            }
            fis.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
}

1 Ответ

5 голосов
/ 26 марта 2012

Вы не публикуете его, но я думаю, что вы получаете исключение NullPointerException.Это потому, что con равно null, когда вы пытаетесь создать FileInputStream.

Поскольку Activity уже является Context, вы можете просто исключить con из оператора.(Вы также должны использовать интерфейс InputStream вместо FileInputStream.)

InputStream is = getResources().openRawResource(R.raw.quiz_questions);

Наконец, вы должны реорганизовать свой код так, чтобы is закрывался независимо от того, было ли выдано исключение:

public void fillArray() {
    try (InputStream is = getResources().openRawResource(R.raw.quiz_questions)) {
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String nextLine;
        int i = 0, j = 0;
        while ((nextLine = br.readLine()) != null) {
            if (j == 5) {
                j = 0;
                i++;
            }
            questions[i][j] = nextLine;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
...