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