0

Androidは、特定のタイプのリソースをロードするための作業を非常に簡単にするようです。殴られた道を少し離れると、あまり役に立たないようです。画像、サウンド、その他のオブジェクトをアセットフォルダーから読み込むことができるのは、それらが特定のタイプである場合のみです。自分の形式のバイナリファイルを読み込もうとすると、ディレクトリを一覧表示すると明らかにそこにあることが示されていても、「ファイルが見つかりません」という例外が発生します。

次の方法を使用して、アセットディレクトリからカスタム形式のバイナリファイルを読み取ってみました。

File jfile = new File("file://android_asset/"+filename); //tried to get the URI of the assets folder
JarFile file = new JarFile("assets/"+filename); //tried assuming the assets folder is root
fd = am.openNonAssetFd( filename); //tried getting my file as an non asset in the assets folder (n.b. it is definitely there)
fs = am.open(filename, AssetManager.ACCESS_BUFFER); //tried loading it as an asset

アンドロイドファイルI/Oには、まだわからない基本的なことがあると思います。資産管理の文書化は不完全であるように思われ、これを故意に直感的でないものにする理由があるに違いありません(セキュリティと関係がありますか?)。それで、Androidアプリ内に自分のフォーマットのバイナリファイルをロードするためのばかげた、標準的な方法は何ですか?

アップデート:

file:/// android_asset /を試しましたが、それでも喜びはありません。

String fullfilename = "file:///android_asset/"+filename;
File jfile = new File(fullfilename);
if (jfile.exists())
{
    return new FileInputStream(jfile);
}
else
{
return null;  //the file does exist but it always says it doesn't. 
}

ファイルまたはプロジェクトマニフェストに必要な権限はありますか?

ありがとう

4

3 に答える 3

2

Assetsフォルダーからファイルをロードする最良の方法は、AssetManager.open(String filename)を使用することだと思います。これにより、InputStreamをラップして、バイトを取得するためにBufferedInputStream呼び出すことができます。read()これは、ファイルの種類に関係なく機能します。このアプローチで具体的にどのような問題がありましたか?

于 2011-08-07T14:11:08.153 に答える
1

私はあなたがのようにスラッシュを省略したと思います

File jfile = new File("file:///android_asset/"+filename);

スラッシュは2つではなく、3つあります。:)

于 2011-08-07T11:13:31.693 に答える
0

私にとっての解決策は、アプリケーションのインストールを解除し、Eclipseでプロジェクトをクリーンアップして、再度実行することでした。問題は、Androidがアセットフォルダーに置いた新しいファイルを見つけられなかったことです。私はこの質問を読んでしまったので、これが他の誰かに役立つことを願っています。

于 2013-05-14T08:41:15.020 に答える