94

我想从文件夹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

4 回答 4

168

在给定链接的帮助下,我能够自己解决问题。正确的方法是获取资源ID

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

将其作为 InputStream

InputStream ins = getResources().openRawResource(
            getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION",
            "raw", getPackageName()));
于 2013-04-10T19:18:42.460 回答
46

这是从原始文件夹中获取 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();
    }
于 2013-04-09T21:27:49.797 回答
14

您可以使用getResources().openRawResource(R.raw.myfilename).

但是有一个 IDE 限制,您使用的文件名只能包含小写字母数字字符和点。所以文件名像XYZ.txtormy_data.bin不会在 R 中列出。

于 2013-07-11T22:35:24.450 回答
3

以下是您可以使用 Kotlin 读取原始资源的两种方法。

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

队友的欢呼声

// R.raw.data_post

this.context.resources.openRawResource(R.raw.data_post)
this.context.resources.getIdentifier("data_post", "raw", this.context.packageName)
于 2019-02-01T07:26:29.520 回答