Access resource files in Android
Asked Answered
U

1

40

I have a resource file in my /res/raw/ folder (/res/raw/textfile.txt) which I am trying to read from my android app for processing.

public static void main(String[] args) {

    File file = new File("res/raw/textfile.txt");
    
    FileInputStream fis = null;
    BufferedInputStream bis = null;
    DataInputStream dis = null;

    try {
      fis = new FileInputStream(file);
      bis = new BufferedInputStream(fis);
      dis = new DataInputStream(bis);

      while (dis.available() != 0) {
              // Do something with file
          Log.d("GAME", dis.readLine()); 
      }

      fis.close();
      bis.close();
      dis.close();

    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

I have tried different path syntax but always get a java.io.FileNotFoundException error. How can I access /res/raw/textfile.txt for processing? Is File file = new File("res/raw/textfile.txt"); the wrong method in Android?


***** Answer: *****

// Call the LoadText method and pass it the resourceId
LoadText(R.raw.textfile);
       
public void LoadText(int resourceId) {
    // The InputStream opens the resourceId and sends it to the buffer
    InputStream is = this.getResources().openRawResource(resourceId);
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String readLine = null;
    
    try {
        // While the BufferedReader readLine is not null 
        while ((readLine = br.readLine()) != null) {
            Log.d("TEXT", readLine);
        }

        // Close the InputStream and BufferedReader
        is.close();
        br.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
}

Note this will return nothing, but will print the contents line by line as a DEBUG string in the log.

Ultramicrometer answered 2/11, 2010 at 20:22 Comment(1)
Consider using Apache Commons. Search for IOUtils there.Candidacandidacy
B
36

If you have a file in res/raw/textfile.txt from your Activity/Widget call:

getResources().openRawResource(...) returns an InputStream

The dots should actually be an integer found in R.raw... corresponding to your filename, possibly R.raw.textfile (it's usually the name of the file without extension)

new BufferedInputStream(getResources().openRawResource(...)); then read the content of the file as a stream

Blastomere answered 2/11, 2010 at 21:19 Comment(3)
I've tried: File file = new File(R.raw.textfile); - I'll try to use getResources().OpenRawResource(R.raw.textfile) and give that to File if I can.Ultramicrometer
No matter how I use "getResources().openRawResource(R.raw.textfile)" eclipse always gives the error "The method getResources() is undefined for the type MyClass".Ultramicrometer
getResources() is a method of the Context class. You can only get the resources with respect to a context.Bernstein

© 2022 - 2024 — McMap. All rights reserved.