Quiero abrir un archivo de la carpeta res / raw / . Estoy absolutamente seguro de que el archivo existe. Para abrir el archivo que he intentado
File ddd = new File("res/raw/example.png");
El comando
ddd.exists();
produce FALSO . Entonces este método no funciona.
Molesto
MyContext.getAssets().open("example.png");
termina en una excepción con getMessage () "null".
Simplemente usando
R.raw.example
no es posible porque el nombre del archivo solo se conoce durante el tiempo de ejecución como una cadena.
¿Por qué es tan difícil acceder a un archivo en la carpeta / res / raw /?
Respuestas:
Con la ayuda de los enlaces proporcionados, pude resolver el problema yo mismo. La forma correcta es obtener el ID del recurso con
getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION", "raw", getPackageName());
Para obtenerlo como InputStream
InputStream ins = getResources().openRawResource( getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION", "raw", getPackageName()));
fuente
raw/
el nombre del archivo. Ejemplo válido:.getIdentifier("products","raw", getPackageName());
parares/raw/products.json
Aquí hay un ejemplo de cómo tomar un archivo XML de una carpeta sin procesar:
InputStream XmlFileInputStream = getResources().openRawResource(R.raw.taskslists5items); // getting XML
Entonces tú puedes:
String sxml = readTextFile(XmlFileInputStream);
cuando:
public String readTextFile(InputStream inputStream) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); byte buf[] = new byte[1024]; int len; try { while ((len = inputStream.read(buf)) != -1) { outputStream.write(buf, 0, len); } outputStream.close(); inputStream.close(); } catch (IOException e) { } return outputStream.toString(); }
fuente
InputStream input = Context.getResources().openRawResource(R.raw.configjson);
Puede leer archivos en formato raw / res usando
getResources().openRawResource(R.raw.myfilename)
.PERO existe una limitación IDE de que el nombre de archivo que usa solo puede contener caracteres alfanuméricos en minúscula y puntos. Por lo tanto, los nombres de archivos como
XYZ.txt
omy_data.bin
no aparecerán en R.fuente
Aquí hay dos enfoques en los que puede leer recursos en bruto utilizando Kotlin.
Puede obtenerlo obteniendo la identificación del recurso. O puede usar un identificador de cadena en el que puede cambiar el nombre de archivo mediante programación con incrementos.
Saludos amigo 🎉
// R.raw.data_post this.context.resources.openRawResource(R.raw.data_post) this.context.resources.getIdentifier("data_post", "raw", this.context.packageName)
fuente