Je veux ouvrir un fichier du dossier res/raw/. Je suis absolument sûr que le fichier existe . Pour ouvrir le fichier que j'ai essayé
File ddd = new File("res/raw/example.png");
La commande
ddd.exists();
donneFAUX. Donc, cette méthode ne fonctionne pas.
En essayant
MyContext.getAssets().open("example.png");
se termine dans une exception avec getMessage () "null".
Simplement en utilisant
R.raw.example
n'est pas possible car le nom de fichier est uniquement connu au moment de l'exécution en tant que chaîne.
Pourquoi est-il si difficile d'accéder à un fichier du dossier/res/raw /?
Avec l'aide des liens fournis, j'ai pu résoudre le problème moi-même. La bonne façon est d’obtenir l’ID de ressource avec
getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION",
"raw", getPackageName());
Pour l'obtenir en tant que InputStream
InputStream ins = getResources().openRawResource(
getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION",
"raw", getPackageName()));
Voici un exemple de prise d'un fichier XML à partir d'un dossier brut:
InputStream XmlFileInputStream = getResources().openRawResource(R.raw.taskslists5items); // getting XML
Ensuite vous pouvez:
String sxml = readTextFile(XmlFileInputStream);
quand:
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();
}
Vous pouvez lire les fichiers dans raw/res en utilisant getResources().openRawResource(R.raw.myfilename)
.
MAIS il existe une limitation IDE selon laquelle le nom de fichier que vous utilisez ne peut contenir que des caractères alphanumériques minuscules et un point. Ainsi, les noms de fichiers tels que XYZ.txt
ou my_data.bin
ne seront pas listés dans R.
Voici deux approches pour lire des ressources brutes à l’aide de Kotlin.
Vous pouvez l'obtenir en obtenant l'identifiant de la ressource. Vous pouvez également utiliser un identificateur de chaîne dans lequel vous pouvez modifier le nom de fichier par programmation avec une incrémentation.
Salut mate ????
// R.raw.data_post
this.context.resources.openRawResource(R.raw.data_post)
this.context.resources.getIdentifier("data_post", "raw", this.context.packageName)