2010-11-02 17 views
25

Tengo un archivo de recursos en mi/res/raw/carpeta (/res/raw/textfile.txt) que estoy tratando de leer desde mi aplicación de Android para su procesamiento.Acceder a los archivos de recursos en Android

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(); 
    } 
    } 

He intentado diferentes sintaxis de la ruta, pero siempre obtendrá un error java.io.FileNotFoundException. ¿Cómo puedo acceder a /res/raw/textfile.txt para procesar? Es File file = new File ("res/raw/textfile.txt"); el método incorrecto en Android?


* Respuesta: *

// 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(); 
    } 
} 
+0

Considérenos ing [Apache Commons] (http://commons.apache.org/proper/commons-io/). Busque 'IOUtils' allí. – JJD

Respuesta

23

Si usted tiene un archivo en res/raw/textfile.txt de su actividad de llamadas/Widget:

getResources().openRawResource(...) devuelve un InputStream

Los puntos realidad debe ser un número entero encuentran en R.raw ... que corresponde al nombre del archivo, posiblemente R.raw.textfile (por lo general es el nombre del archivo sin extensión)

new BufferedInputStream(getResources().openRawResource(...)); después lee el contenido del archivo como una corriente

+0

Lo he intentado: File file = new File (R.raw.textfile); - Trataré de usar getResources(). OpenRawResource (R.raw.textfile) y dar eso a File si puedo. – Selzier

+0

No importa cómo use "getResources(). OpenRawResource (R.raw.textfile)" eclipse siempre da el error "El método getResources() no está definido para el tipo MyClass". – Selzier

+0

getResources() es un método de la clase Contexto. Solo puede obtener los recursos con respecto a un contexto. – Falmarri

10

Sólo el hecho de que usted tiene esta public static void main(String[] args) significa que va a implementar el código muy mal. Es casi seguro que no hayas pasado por ninguno de los hello android tutorials. Definitivamente deberías hacer eso.

+1

+1 buena captura! Es curioso ver un método principal en una aplicación de Android XD – Cristian

+0

He pasado por todos los hello android tutorials, incluyendo cada uno de los tutoriales de vista, los tutoriales de registro de errores y el tutorial de bloc de notas. Sin embargo, no soy experto en Java y no entiendo por qué el uso de public void main (String [] args) es incorrecto. – Selzier

+2

porque esa no es la forma en que Android ejecuta aplicaciones. Ahora, puede incluir esto, quizás, para ejecutar sus propias pruebas o algo así (¿por qué no?), Pero en el mundo de Android, su programa nunca está realmente bajo control. Cuando ocurre un determinado evento (como cuando el usuario presiona un botón), se invoca el método de devolución de llamada correspondiente en su aplicación. Cuando finaliza la devolución de llamada, el control vuelve a Android. –

Cuestiones relacionadas