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?
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()));
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();
}
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.
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)