Access resource files in Android

86,892

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

Share:
86,892
Selzier
Author by

Selzier

Updated on May 18, 2020

Comments

  • Selzier
    Selzier almost 4 years

    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();
        }
    }
    
  • Selzier
    Selzier over 13 years
    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.
  • Selzier
    Selzier over 13 years
    No matter how I use "getResources().openRawResource(R.raw.textfile)" eclipse always gives the error "The method getResources() is undefined for the type MyClass".
  • Falmarri
    Falmarri over 13 years
    getResources() is a method of the Context class. You can only get the resources with respect to a context.