it-swarm.com.de

So lesen Sie die Datei mit dem Namen aus res/raw

Ich möchte eine Datei aus dem Ordnerres/raw/öffnen. Ich bin absolut sicher, dass die Datei existiert . Zum Öffnen der Datei habe ich versucht

File ddd = new File("res/raw/example.png");

Der Befehl 

ddd.exists(); 

ergibtFALSE. Diese Methode funktioniert also nicht.

Versuchen

MyContext.getAssets().open("example.png");

endet in einer Ausnahme mit getMessage () "null".

Einfach mit 

R.raw.example

ist nicht möglich, da der Dateiname nur zur Laufzeit als String bekannt ist.

Warum ist der Zugriff auf eine Datei im Ordner/res/raw/so schwierig?

58
Bernd

Mit Hilfe der angegebenen Links konnte ich das Problem selbst lösen. Der korrekte Weg ist, die Ressourcen-ID mit abzurufen

getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION",
                             "raw", getPackageName());

Um es als InputStream zu erhalten

InputStream ins = getResources().openRawResource(
            getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION",
            "raw", getPackageName()));
114
Bernd

Hier ein Beispiel für das Abrufen einer XML-Datei aus einem unformatierten Ordner:

 InputStream XmlFileInputStream = getResources().openRawResource(R.raw.taskslists5items); // getting XML

Dann kannst du:

 String sxml = readTextFile(XmlFileInputStream);

wann:

 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

Sie können Dateien in raw/res mit getResources().openRawResource(R.raw.myfilename) lesen.

ABER es gibt eine Einschränkung von IDE, dass der verwendete Dateiname nur alphanumerische Kleinbuchstaben und Punkte enthalten kann. Dateinamen wie XYZ.txt oder my_data.bin werden daher nicht in R aufgeführt.

9
user2574545

Hier sind zwei Ansätze, mit denen Sie Rohmaterialien mit Kotlin lesen können.

Sie können es erhalten, indem Sie die Ressourcen-ID abrufen. Sie können auch den String-Bezeichner verwenden, in dem Sie den Dateinamen mit Erhöhung schrittweise ändern können. 

Prost, Kumpel ????

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