web-dev-qa-db-ja.com

res / rawから名前でファイルを読み取る方法

フォルダー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 /内のファイルにアクセスするのがなぜ難しいのですか?

70
Bernd

与えられたリンクの助けを借りて、私は自分で問題を解決することができました。正しい方法は、リソースIDを取得することです

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

InputStreamとして取得するには

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

以下は、rawフォルダーから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();
    }
37
Emil Adz

getResources().openRawResource(R.raw.myfilename)を使用してraw/resのファイルを読み取ることができます。

ただし、使用するファイル名には小文字の英数字とドットしか使用できないというIDEの制限があります。したがって、XYZ.txtmy_data.binなどのファイル名はRにリストされません。

10
user2574545

Kotlinを使用して生のリソースを読み取ることができる2つのアプローチを次に示します。

リソースIDを取得することで取得できます。または、プログラムでファイル名を増分で変更できる文字列識別子を使用できます。

歓声メイト ????

// R.raw.data_post

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