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()));
답변
다음은 원시 폴더에서 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();
}
답변
를 사용하여 raw / res 파일을 읽을 수 있습니다 getResources().openRawResource(R.raw.myfilename)
.
그러나 사용하는 파일 이름에 소문자 영숫자 문자와 점만 포함 할 수 있다는 IDE 제한이 있습니다. 따라서 파일 이름 은 R에 나열 XYZ.txt
되거나 my_data.bin
나열되지 않습니다.
답변
Kotlin을 사용하여 원시 리소스를 읽을 수있는 두 가지 접근 방식이 있습니다.
리소스 ID를 가져 와서 얻을 수 있습니다. 또는 증분으로 파일 이름을 프로그래밍 방식으로 변경할 수있는 문자열 식별자를 사용할 수 있습니다.
건배 메이트 ?
// R.raw.data_post
this.context.resources.openRawResource(R.raw.data_post)
this.context.resources.getIdentifier("data_post", "raw", this.context.packageName)