Я хочу открыть файл из папки res / raw / . Я абсолютно уверен, что файл существует. Чтобы открыть файл, который я пробовал
File ddd = new File("res/raw/example.png");
Команда
ddd.exists();
дает ЛОЖЬ . Так что этот метод не работает.
Пытаюсь
MyContext.getAssets().open("example.png");
заканчивается исключением с getMessage () "null".
Просто используя
R.raw.example
невозможно, потому что имя файла известно только во время выполнения как строка.
Почему так сложно получить доступ к файлу в папке / res / raw /?
Ответы:
С помощью предоставленных ссылок я смог сам решить проблему. Правильный способ - получить идентификатор ресурса с помощью
getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION", "raw", getPackageName());
Чтобы получить его как InputStream
InputStream ins = getResources().openRawResource( getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION", "raw", getPackageName()));
источник
raw/
имя файла в начале. Действительный пример:.getIdentifier("products","raw", getPackageName());
дляres/raw/products.json
Вот пример получения XML-файла из необработанной папки:
InputStream XmlFileInputStream = getResources().openRawResource(R.raw.taskslists5items); // getting XML
Тогда ты можешь:
String sxml = readTextFile(XmlFileInputStream);
когда:
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(); }
источник
InputStream input = Context.getResources().openRawResource(R.raw.configjson);
Вы можете читать файлы в формате raw / res, используя
getResources().openRawResource(R.raw.myfilename)
.НО существует ограничение IDE: имя файла, которое вы используете, может содержать только строчные буквы, цифры и точку. Таким образом, имена файлов вроде
XYZ.txt
илиmy_data.bin
не будут отображаться в R.источник
Вот два подхода, с помощью которых вы можете читать необработанные ресурсы с помощью Kotlin.
Вы можете получить его, получив идентификатор ресурса. Или вы можете использовать строковый идентификатор, в котором вы можете программно изменить имя файла с увеличением.
Ура, приятель 🎉
// R.raw.data_post this.context.resources.openRawResource(R.raw.data_post) this.context.resources.getIdentifier("data_post", "raw", this.context.packageName)
источник