Java 资产管理器对我的文件(Android)有问题
我在Android应用程序的资产中有一个名为Gate.IC的文件 我使用此代码测量资产中文件的长度:Java 资产管理器对我的文件(Android)有问题,java,android,exception,file-io,Java,Android,Exception,File Io,我在Android应用程序的资产中有一个名为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.re
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文件:
您可以使用此选项获取文件的长度:
getAssets().openFd( "filename" ).getLength();
我已经解决了这个问题。
正如我所说,事实证明ADT或Android SDK包会压缩一些资产。我的文件是我自己的自定义格式,将被压缩。
一旦你的文件被压缩,你就不能像我一样阅读它
Android SDK中有一个名为aapt.exe的程序。它负责资产的包装。
您只需使用-0标记调用此命令。
听起来很简单,对吧
问题是eclipse不允许您从ADT插件中向该命令添加标志
您需要编辑Android SDK XML构建文件,或者用自己的程序替换aapt.exe,该程序使用所需的标志调用原始aapt.exe程序
我做了后者
这是我的devblog条目
谢谢,但我在尝试读取文件时仍然遇到同样的问题。显然我的文件被压缩了,我需要以某种方式读取压缩文件?这个错误没有发生在Nexus 4上,但它确实发生在三星Galaxy SII上!