【发布时间】:2011-10-21 18:50:46
【问题描述】:
Android 似乎让加载某些类型的资源变得非常容易。一旦我离开了人迹罕至的地方,它似乎就没有多大帮助了。当且仅当它们属于某些类型时,我才能从资产文件夹中加载图像、声音和其他对象。如果我尝试加载我自己格式的二进制文件,我会得到一个不太有用的“找不到文件”异常,即使列出目录表明它显然存在。
我尝试使用以下方法从 assets 目录中读取自定义格式的二进制文件:
File jfile = new File("file://android_asset/"+filename); //tried to get the URI of the assets folder
JarFile file = new JarFile("assets/"+filename); //tried assuming the assets folder is root
fd = am.openNonAssetFd( filename); //tried getting my file as an non asset in the assets folder (n.b. it is definitely there)
fs = am.open(filename, AssetManager.ACCESS_BUFFER); //tried loading it as an asset
我在想关于 android 文件 I/O 的一些基本知识我还不明白。资产管理的文档似乎不完整,一定有一些理由故意使这个不直观(与安全有关?)。那么,在 Android 应用程序中加载我自己格式的二进制文件的最简单、规范的方法是什么?
更新:
我尝试了 file:///android_asset/ 但仍然没有乐趣。
String fullfilename = "file:///android_asset/"+filename;
File jfile = new File(fullfilename);
if (jfile.exists())
{
return new FileInputStream(jfile);
}
else
{
return null; //the file does exist but it always says it doesn't.
}
是否有我需要的文件或项目清单中的任何权限?
谢谢
【问题讨论】:
-
定义“我自己格式的二进制文件”?你在说什么?
-
嗨。我不确定如何更具体。我有一个充满数据的文件;在本例中,是我编写的编辑器输出的 3D 模型。数据的格式是我自己定义的——也就是说,文件中字节的顺序是我选择的格式。 4 个标头字节、材质信息、作为 IEEE 4 字节浮点数的顶点以及位置、颜色、纹理坐标等。之后是多边形索引、动画数据等。不过这并不重要——重要的是我从资产(或任何其他)文件夹中获取这些字节并进入内存。
标签: java android file io android-assets