我的Android App中的资产中有一个名为Gate.IC的文件。
我使用此代码来衡量资产中文件的长度:
private byte[] Buf = new byte[1024*512];
public int FileLength (String s)
{
int Count = 0;
try {
InputStream s2 = assetManager.open(s);
int tmp = 0;
while ((tmp=s2.read(Buf))>0)
Count+=tmp;
s2.close();
}
catch (IOException e) {
String Message = e.getMessage();
}
return Count;
}
此代码适用于除此之外的所有文件。
当它到达这个文件时,它会打开它(并显示正确的文件长度),但当它读取它时,我得到一个IOException并且LogCat说"错误读取资产数据"然后"无法访问资产数据:-1"
如果我使用不同的文件并将其更改为Gate.IC并且在资产中没有实际的Gate.IC文件,则可以正常工作。 如果我将原始Gate.IC的名称更改为另一个资产的名称,那么我会在" cover"中得到相同的错误。名。
我不知道此文件中的内容是什么,它无法读取。
这是Rogue文件:
答案 0 :(得分:0)
您可以使用它来获取文件的长度:
getAssets().openFd( "filename" ).getLength();
答案 1 :(得分:0)
我已经解决了这个问题。 好吧,正如我所知,ADT或Android SDK包装会压缩一些资产。我的文件是我自己的自定义格式将被压缩。 压缩文件后,您无法像我一样阅读它。
Android SDK中有一个名为aapt.exe的程序。它负责资产的包装。 您需要做的就是使用标志-0调用此命令。 听起来很简单,对吧?
问题是eclipse不允许你在ADT插件中为这个命令添加标志。
您需要编辑Android SDK XML构建文件,或者将aapt.exe替换为您自己的程序,该程序使用您想要的标记调用原始aapt.exe程序。
我做了后者。
这是关于它的devblog条目。
http://pompidev.net/2012/10/27/unable-to-access-asset-data-1-and-compressed-assetsandroid/