Как читать файл из 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/ ?

654   3  

3 ответов:

С помощью данных ссылок мне удалось решить проблему самостоятельно. Правильный способ-получить идентификатор ресурса с помощью

getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION",
                             "raw", getPackageName());

чтобы получить его как InputStream

InputStream ins = getResources().openRawResource(
            getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION",
            "raw", getPackageName()));

вот пример взятия XML-файла из папки raw:

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

вы можете читать файлы в raw / res с помощью getResources().openRawResource(R.raw.myfilename).

но есть ограничение IDE, что имя файла, которое вы используете, может содержать только строчные буквенно-цифровые символы и точку. Так что имена файлов, как XYZ.txt или my_data.bin не будет указан в R.

Comments

    Ничего не найдено.