0

我的 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.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 的名称更改为另一个资产的名称,那么我会收到与“封面”名称相同的错误。

我不知道这个文件中的内容是什么,它只是无法读取。

这是流氓文件:

https://dl.dropbox.com/u/8025882/RPG/Gate.IC

4

2 回答 2

0

我已经解决了这个问题。正如我所提到的,事实证明 ADT 或 Android SDK 打包会压缩一些资产。我的文件是我自己的自定义格式,将被压缩。一旦你的文件被压缩,你就不能像我一样阅读它了。

Android SDK 中有一个名为 aapt.exe 的程序。它对资产进行打包。您需要做的就是使用标志 -0 调用此命令。听起来很简单,对吧?

问题是 Eclipse 不允许您从 ADT 插件中向此命令添加标志。

您需要编辑 Android SDK XML 构建文件,或者将 aapt.exe 替换为您自己的程序,该程序使用您想要的标志调用原始 aapt.exe 程序。

我做了后者。

这是我关于它的开发博客条目。

http://pompidev.net/2012/10/27/unable-to-access-asset-data-1-and-compressed-assetsandroid/

于 2012-10-27T17:06:51.647 回答
0

您可以使用它来获取文件的长度:

getAssets().openFd( "filename" ).getLength();
于 2012-10-27T08:38:04.397 回答