Android assets,如何从子文件夹中读取文件?
Android assets, how can I read a file from a subfolder?
下面的代码有效:它读取名为 "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();
如果我想阅读的文件位于资产的子文件夹中,例如子文件夹 "sub",我将这个 Uri 提供给上面的代码:
String u = "content://com.example.app/sub/file.txt:assets"
...那么在这种情况下我什么也得不到。该文件在那里,如 assets/sub/file.txt 但上面的代码 returns 是一个空缓冲区。我所做的唯一更改是将 "file.txt" 替换为 "sub/file.txt",后者指向文件的存储位置。
我做错了什么?像这样手动创建uri字符串是错误的吗?我相信允许将文件存储在资产子文件夹中......如果允许,我如何在 uri 字符串中指定路径?
请注意,我并不是要向其他应用授予对该文件的访问权限,我只是想从我自己的 APK 资产中读取我自己的文件并将其放入缓冲区供内部使用。
非常感谢任何帮助!
使用 AssetManager
和 its open()
method。因此,您将替换:
ContentResolver r = controls.activity.getContentResolver();
InputStream in = r.openInputStream(Uri.parse(u));
与:
AssetManager assets = controls.activity.getAssets();
InputStream in = assets.open("sub/file.txt");
下面的代码有效:它读取名为 "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();
如果我想阅读的文件位于资产的子文件夹中,例如子文件夹 "sub",我将这个 Uri 提供给上面的代码:
String u = "content://com.example.app/sub/file.txt:assets"
...那么在这种情况下我什么也得不到。该文件在那里,如 assets/sub/file.txt 但上面的代码 returns 是一个空缓冲区。我所做的唯一更改是将 "file.txt" 替换为 "sub/file.txt",后者指向文件的存储位置。
我做错了什么?像这样手动创建uri字符串是错误的吗?我相信允许将文件存储在资产子文件夹中......如果允许,我如何在 uri 字符串中指定路径?
请注意,我并不是要向其他应用授予对该文件的访问权限,我只是想从我自己的 APK 资产中读取我自己的文件并将其放入缓冲区供内部使用。
非常感谢任何帮助!
使用 AssetManager
和 its open()
method。因此,您将替换:
ContentResolver r = controls.activity.getContentResolver();
InputStream in = r.openInputStream(Uri.parse(u));
与:
AssetManager assets = controls.activity.getAssets();
InputStream in = assets.open("sub/file.txt");