繁体   English   中英

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

[英]How to read file from res/raw by name

我想从文件夹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 /文件夹中的文件如此困难?

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

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

使其作为InputStream获得

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

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

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

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

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

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

干杯

// R.raw.data_post

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM