Chcę otworzyć plik z folderu res / raw / . Jestem absolutnie pewien, że plik istnieje. Aby otworzyć plik, który próbowałem
File ddd = new File("res/raw/example.png");
Komenda
ddd.exists();
daje wartość FALSE . Więc ta metoda nie działa.
Próbować
MyContext.getAssets().open("example.png");
kończy się wyjątkiem z getMessage () „null”.
Po prostu używając
R.raw.example
nie jest możliwe, ponieważ nazwa pliku jest znana tylko w czasie wykonywania jako ciąg.
Dlaczego dostęp do pliku w folderze / res / raw / jest tak trudny?
Odpowiedzi:
Za pomocą podanych linków udało mi się samodzielnie rozwiązać problem. Prawidłowym sposobem jest pobranie identyfikatora zasobu za pomocą
getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION", "raw", getPackageName());
Aby uzyskać to jako InputStream
InputStream ins = getResources().openRawResource( getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION", "raw", getPackageName()));
źródło
raw/
nazwy pliku na początku. Prawidłowy przykład:.getIdentifier("products","raw", getPackageName());
dlares/raw/products.json
Oto przykład pobierania pliku XML z surowego folderu:
InputStream XmlFileInputStream = getResources().openRawResource(R.raw.taskslists5items); // getting XML
Następnie możesz:
String sxml = readTextFile(XmlFileInputStream);
gdy:
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(); }
źródło
InputStream input = Context.getResources().openRawResource(R.raw.configjson);
Możesz czytać pliki w formacie RAW / RES używając
getResources().openRawResource(R.raw.myfilename)
.ALE istnieje ograniczenie IDE, że nazwa pliku, którego używasz, może zawierać tylko małe litery alfanumeryczne i kropki. Dlatego nazwy plików takie jak
XYZ.txt
lubmy_data.bin
nie będą wymienione w R.źródło
Oto dwa podejścia, które możesz odczytać surowe zasoby za pomocą Kotlina.
Możesz go zdobyć, uzyskując identyfikator zasobu. Lub możesz użyć identyfikatora ciągu, w którym możesz programowo zmienić nazwę pliku z inkrementacją.
Pozdrawiam kolego 🎉
// R.raw.data_post this.context.resources.openRawResource(R.raw.data_post) this.context.resources.getIdentifier("data_post", "raw", this.context.packageName)
źródło