如何按名称从res / raw读取文件

时间:2013-04-09 21:24:18

标签: android file-io resources

我想从文件夹 res / raw / 打开一个文件。 我绝对相信文件存在。 要打开我试过的文件

File ddd = new File("res/raw/example.png");

命令

ddd.exists(); 

产生 FALSE 。所以这种方法不起作用。

尝试

MyContext.getAssets().open("example.png");

以getMessage()“null”的异常结束。

只需使用

R.raw.example

是不可能的,因为文件名仅在运行时作为字符串被识别。

为什么访问文件夹/ res / raw /?

中的文件如此困难

4 个答案:

答案 0 :(得分:125)

在给定链接的帮助下,我能够自己解决问题。正确的方法是使用

获取资源ID
getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION",
                             "raw", getPackageName());

将其作为InputStream

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

答案 1 :(得分:36)

以下是从原始文件夹中获取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();
    }

答案 2 :(得分:9)

您可以使用getResources().openRawResource(R.raw.myfilename)读取raw / res中的文件。

但是有一个IDE限制,您使用的文件名只能包含小写字母数字字符和点。因此,XYZ.txtmy_data.bin等文件名不会列在R。

答案 3 :(得分:0)

有两种方法可以使用Kotlin读取原始资源。

您可以通过获取资源ID来获取它。或者,您可以使用字符串标识符,在其中可以以增量方式以编程方式更改文件名。

干杯伴侣

// R.raw.data_post

this.context.resources.openRawResource(R.raw.data_post)
this.context.resources.getIdentifier("data_post", "raw", this.context.packageName)