2010-05-18 12 views

Respuesta

25
InputStream raw = context.getAssets().open("filename.ext"); 

Reader is = new BufferedReader(new InputStreamReader(raw, "UTF8")); 
+18

Consulte la respuesta de Samuh (abajo), es más preciso. – BoD

+1

Como nota al margen, la carpeta sin formato no permite el acceso por nombre de archivo. Algunas aplicaciones necesitan nombres de archivos dinámicos, por lo que en esos casos la carpeta 'assets' es útil – Caner

+8

no preguntó sobre activos/preguntó acerca de res/raw/ –

111

Para los archivos sin formato, debe considerar la creación de una carpeta sin formato dentro del directorio res y luego llamar al getResources().openRawResource(resourceName) desde su actividad.

+0

Samuh, gracias por su respuesta, si hago esto, tengo errores Problema de formato de Android XML, porque no uso xml estándar, ¿hay alguna otra manera de usarlo como datos realmente sin formato? – Arkaha

+0

¿qué quiere decir con XML no estándar? También puede agrupar archivos XML en activos. – Samuh

+0

Samuh, estoy portando la aplicación j2me, y tiene archivos con la extensión * .xml, contenido de dichos archivos muy similar a xml, pero no es lo mismo, eclipse gritando en estos archivos, porque no puede compilarlo. Probablemente puedo establecer algún tipo de "ignorar" en estos archivos? pero no sé cómo ... – Arkaha

3
TextView txtvw = (TextView)findViewById(R.id.TextView01); 
     txtvw.setText(readTxt()); 

private String readTxt() 
    { 
    InputStream raw = getResources().openRawResource(R.raw.hello); 

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 

    int i; 
    try 
    { 
     i = raw.read(); 
     while (i != -1) 
     { 
      byteArrayOutputStream.write(i); 
      i = raw.read(); 
     } 
     raw.close(); 
    } 
    catch (IOException e) 
    { 
     // TODO Auto-generated catch block 

     e.printStackTrace(); 
    } 


    return byteArrayOutputStream.toString(); 

} 

TextView01 :: txtview en LinearLayout hola :: archivo .txt en res/carpeta en bruto (u puede acceder a la carpeta othr ny como wel)

Ist 2 líneas están escritas en 2 onCreate() método

resto debe escribirse en clase extendiendo Actividad !!

12

En algunas situaciones que tenemos para obtener la imagen de la carpeta estirable o crudo usando nombre de la imagen en lugar si se generan Identificación

// Image View Object 
     mIv = (ImageView) findViewById(R.id.xidIma); 
// create context Object for to Fetch image from resourse 
Context mContext=getApplicationContext(); 

// getResources().getIdentifier("image_name","res_folder_name", package_name); 

// find out below example 
    int i = mContext.getResources().getIdentifier("ic_launcher","raw", mContext.getPackageName()); 

// now we will get contsant id for that image  
     mIv.setBackgroundResource(i); 
+4

Esta línea: int i = mContext.getResources(). GetIdentifier (" ic_launcher "," raw ", mContext.getPackageName()); es GOLD – Radu

2

InputStream in = getResources() openRawResource (resourceName).;

Esto funcionará correctamente. Antes de eso tienes que crear el archivo xml/archivo de texto en el recurso sin formato. Entonces será accesible.

Editar
Algunas veces com.andriod.R se importará si hay algún error en el archivo de diseño o en los nombres de las imágenes. Entonces, tiene que importar el paquete correctamente, entonces solo se podrá acceder al archivo sin formato.

+1

openRawResource() requiere un int, no una cadena http://developer.android.com/reference/android/content/res/Resources.html#openRawResource(int) – mmathieum

+0

Esto también funcionará en los recursos que existen en el carpeta dibujable? –

+1

Use "R.raw.NameOfResource" como int. – CristianCV

3

getClass().getResourcesAsStream() funciona bien en Android. Solo asegúrate de que el archivo que estás intentando abrir esté incrustado correctamente en tu APK (abre la APK como ZIP).

Normalmente, en Android pone esos archivos en el directorio assets. Así que si usted pone el raw_resources.dat en el assets subdirectorio de su proyecto, que va a terminar en el directorio assets en el APK y se puede utilizar:

getClass().getResourcesAsStream("/assets/raw_resources.dat"); 

También es posible personalizar el proceso de construcción para que el archivo no aterriza en el directorio assets en el APK.

0

Un enfoque avance está utilizando la función de extensión

fun Context.getRawInput(@RawRes resourceId: Int): InputStream { 
    return resources.openRawResource(resourceId) 
} 

Una cosa más interesante es función de extensión uso que se define en el alcance que se puede cerrar

Por ejemplo, puede trabajar con flujo de entrada de manera elegante y sin Manejo de excepciones y administración de memoria

fun Context.readRaw(@RawRes resourceId: Int): String { 
    return resources.openRawResource(resourceId).bufferedReader(Charsets.UTF_8).use { it.readText() } 
} 
Cuestiones relacionadas