Ich möchte eine Datei aus dem Ordner res / raw / öffnen . Ich bin absolut sicher, dass die Datei existiert. Um die Datei zu öffnen habe ich versucht
File ddd = new File("res/raw/example.png");
Der Befehl
ddd.exists();
ergibt FALSE . Diese Methode funktioniert also nicht.
Ich versuche es
MyContext.getAssets().open("example.png");
endet in einer Ausnahme mit getMessage () "null".
Einfach benutzen
R.raw.example
ist nicht möglich, da der Dateiname nur zur Laufzeit als String bekannt ist.
Warum ist es so schwierig, auf eine Datei im Ordner / res / raw / zuzugreifen?
Antworten:
Mit Hilfe der angegebenen Links konnte ich das Problem selbst lösen. Der richtige Weg ist, die Ressourcen-ID mit zu erhalten
getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION", "raw", getPackageName());
Um es als InputStream zu bekommen
InputStream ins = getResources().openRawResource( getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION", "raw", getPackageName()));
quelle
raw/
. Gültiges Beispiel:.getIdentifier("products","raw", getPackageName());
fürres/raw/products.json
Hier ist ein Beispiel für das Entnehmen einer XML-Datei aus einem Rohordner:
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(); }
quelle
InputStream input = Context.getResources().openRawResource(R.raw.configjson);
Sie können Dateien in raw / res mit lesen
getResources().openRawResource(R.raw.myfilename)
.ABER es gibt eine IDE-Einschränkung, dass der von Ihnen verwendete Dateiname nur alphanumerische Kleinbuchstaben und Punkte enthalten darf. Daher werden Dateinamen wie
XYZ.txt
odermy_data.bin
nicht in R aufgeführt.quelle
Hier sind zwei Ansätze, mit denen Sie Rohstoffe mit Kotlin lesen können.
Sie können es erhalten, indem Sie die Ressourcen-ID abrufen. Sie können auch eine Zeichenfolgenkennung verwenden, in der Sie den Dateinamen inkrementell programmgesteuert ä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)
quelle