7

I'm trying to read from a file called "quiz_questions.txt" in my res/raw folder. The code I have compiles, but it looks like it stops before it gets to the FileInputStream. Maybe it is opening it, but not reading it. I'm not sure.

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
  • Consider using Apache IOUtils. Commented Oct 8, 2013 at 11:02

1 Answer 1

6

You don't post it, but I imagine that you are getting a NullPointerException. This is because con is null when you try to create the FileInputStream.

Since an Activity is already a Context, you can just eliminate con from the statement. (You should also use the InputStream interface instead of FileInputStream.)

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

Finally, you should reorganize your code so is is closed whether or not an exception is thrown:

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();
    }
}
Sign up to request clarification or add additional context in comments.

4 Comments

You're correct. I was getting a NullPointerException, I just didn't notice that. I tried editing my code like you suggested, but I'm still not having much success.
OK, now I'm not getting the NullPointerException anymore. Thanks a lot for the help.
android.content.res.AssetManager$AssetInputStream cannot be cast to java.io.FileInputStream
@RavinderPayal - Thanks for catching that. I updated my answer to eliminate the unnecessary (and incorrect) use of FileInputStream.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.