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

4
下面的代码可以正常运行:它读取名为“file.txt”的文件,该文件位于APK的“assets”文件夹中,并将其存储在缓冲区中。到目前为止,一切都很好。
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();

如果我要读取的文件在assets的子文件夹中,例如子文件夹"sub",并且我将此Uri提供给上述代码:

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

如果按照上述代码更改了文件路径为"sub/file.txt"并指向文件所在位置,但是返回的仍然是空缓冲区,这种情况下可能出现了问题。请注意,文件实际上存在于"assets/sub/file.txt"的位置。

那么我到底做错了什么呢?手动创建uri字符串是否有误?我相信允许将文件存储在assets子文件夹中...如果允许,如何在uri字符串中指定路径?

请注意,我没有试图将文件授权给另一个应用程序,我只是想从我的APK的assets中读取自己的文件,并将其放入缓冲区以供内部使用。

非常感谢任何帮助!

1个回答

3

使用AssetManager它的open()方法。因此,你需要替换:

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

使用:

AssetManager assets = controls.activity.getAssets();
InputStream in = assets.open("sub/file.txt");

1
完美地工作了,谢谢!我将r.open(...)更改为assets.open(...)。 - MMazzon
@MMazzon:非常抱歉,我在调整您的代码片段时忘记更新了。很高兴它现在能正常工作了! - CommonsWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接