フォルダー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 /内のファイルにアクセスするのがなぜ難しいのですか?
与えられたリンクの助けを借りて、私は自分で問題を解決することができました。正しい方法は、リソースIDを取得することです
getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION",
"raw", getPackageName());
InputStreamとして取得するには
InputStream ins = getResources().openRawResource(
getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION",
"raw", getPackageName()));
以下は、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();
}
getResources().openRawResource(R.raw.myfilename)
を使用してraw/resのファイルを読み取ることができます。
ただし、使用するファイル名には小文字の英数字とドットしか使用できないというIDEの制限があります。したがって、XYZ.txt
やmy_data.bin
などのファイル名はRにリストされません。
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)