在android中加载文件

时间:2011-08-07 10:45:57

标签: java android file io android-assets

Android似乎可以轻松加载某些类型的资源。一旦我离开人迹罕至的路径,它似乎没那么有用。当且仅当它们属于某些类型时,我才可以从assets文件夹加载图像,声音和其他对象。如果我尝试加载我自己格式的二进制文件,我会得到一个不太有用的“找不到文件”的例外,即使列出目录显示它显然在那里。

我尝试使用以下方法从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应用程序中加载我自己格式的二进制文件的傻瓜证明,规范方法是什么?

更新:

我尝试了文件:/// 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. 
}

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

由于

3 个答案:

答案 0 :(得分:2)

我认为从Assets文件夹加载文件的最佳方法是使用AssetManager.open(String filename) - 这会让您返回InputStream,然后您可以将其包裹在BufferedInputStream中,否则调用read()来获取字节。无论文件类型如何,这都可以。你对这种方法有什么样的问题?

答案 1 :(得分:1)

我认为你已经忽略了

中的斜杠
File jfile = new File("file:///android_asset/"+filename);

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

答案 2 :(得分:0)

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