0

Android 似乎让加载某些类型的资源变得非常容易。一旦我离开了人迹罕至的地方,它似乎就没有多大帮助了。当且仅当它们属于某些类型时,我才能从资产文件夹中加载图像、声音和其他对象。如果我尝试加载我自己格式的二进制文件,我会得到一个不太有用的“找不到文件”异常,即使列出目录表明它显然存在。

我尝试使用以下方法从资产目录中读取自定义格式的二进制文件:

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 有一些基本的东西我还不明白。资产管理的文档似乎不完整,一定有一些理由故意使这个不直观(与安全有关?)。那么,在安卓应用程序中加载我自己格式的二进制文件的最简单、规范的方法是什么?

更新:

我尝试了 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. 
}

我需要的文件或项目清单中是否有任何权限?

谢谢

4

3 回答 3

2

我认为从 Assets 文件夹加载文件的最佳方法是使用AssetManager.open(String filename) - 这会给你一个返回,InputStream然后你可以将其包装在 a 中BufferedInputStream,否则调用read()以获取字节。无论文件类型如何,这都会起作用。您在使用这种方法时遇到了哪些具体问题?

于 2011-08-07T14:11:08.153 回答
1

我认为你已经省略了斜线,如

File jfile = new File("file:///android_asset/"+filename);

有三个正斜杠,而不是两个。:)

于 2011-08-07T11:13:31.693 回答
0

对我来说,解决方案是卸载应用程序,在 Eclipse 中清理项目并再次运行它。问题是 Android 找不到我放在资产文件夹中的新文件。我最终阅读了这个问题,所以我希望这对其他人有帮助。

于 2013-05-14T08:41:15.020 回答