web-dev-qa-db-fra.com

Comment lire le fichier de res/raw par nom

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 /?

58
Bernd

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()));
114
Bernd

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

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.

9
user2574545

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)
0
Delacrix Morgan