[android] 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 / 폴더에있는 파일에 액세스하는 것이 왜 그렇게 어려운가요?



답변

주어진 링크의 도움으로 직접 문제를 해결할 수있었습니다. 올바른 방법은 다음을 사용하여 리소스 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)


답변