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 に変更し、アセットに実際の G​​ate.IC ファイルがない場合は機能します。元の Gate.IC の名前を別のアセットの名前に変更すると、「カバー」の名前で同じエラーが発生します。

このファイルを読み取れないのは、このファイルの内容がわかりません。

ローグファイルは次のとおりです。

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

4

2 に答える 2

0

これを使用して、ファイルの長さを取得できます。

getAssets().openFd( "filename" ).getLength();
于 2012-10-27T08:38:04.397 に答える
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 に答える