Android资产,如何从子文件夹读取文件?

时间:2019-05-02 22:19:55

标签: android uri assets subdirectory

以下代码有效:它读取一个名为“ file.txt”的文件,该文件位于APK的“资产”文件夹中,并将其存储在缓冲区中。到目前为止,一切都很好:

String u = "content://com.example.app/file.txt:assets"
ContentResolver r = controls.activity.getContentResolver();
InputStream in = r.openInputStream(Uri.parse(u));
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[4096];
int n = in.read(buffer);
while (n >= 0) {
    out.write(buffer, 0, n);
    n = in.read(buffer);
}
in.close();
return out.toByteArray();

但是,如果我要读取的文件位于资产的子文件夹中,例如子文件夹“ sub”,我将此Uri提供给上面的代码:

String u = "content://com.example.app/sub/file.txt:assets"

...那么在这种情况下我什么也没得到。该文件在那里,为assets / sub / file.txt,但是上面的代码返回一个空缓冲区。我所做的唯一更改是将“ file.txt”替换为“ sub / file.txt”,它指向文件的存储位置。

我在做什么错?这样手动创建uri字符串是否错误?我认为可以将文件存储在资产子文件夹中...如果允许,如何在uri字符串中指定路径?

请注意,我并不是在尝试将文件的访问权限授予其他应用,我只是想从我自己的APK资产中读取自己的文件,并将其放在缓冲区中供内部使用。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

使用dist(a, c) <= dist(a, b) + dist(b, c)its open() method。因此,您将替换为:

AssetManager

具有:

ContentResolver r = controls.activity.getContentResolver();
InputStream in = r.openInputStream(Uri.parse(u));