资产管理器存在我的文件问题(Android)

时间:2012-10-27 08:31:52

标签: java android exception file-io

我的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文件:

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

2 个答案:

答案 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/