簡體   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