Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 资产管理器对我的文件(Android)有问题_Java_Android_Exception_File Io - Fatal编程技术网

Java 资产管理器对我的文件(Android)有问题

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

我在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的名称更改为另一个资产的名称,那么“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上!