2011-09-19 9 views
0

私はAndroidで非常に新しいです。インストール時にアンドロイドファイルシステムのアプリケーションフォルダ(/data/data/my.app/ ...)にファイルを置くパッケージを作成したいと思います。インストール時にアンドロイドファイルシステムにファイルを置くことは可能ですか?

私はこれをやりたいので、標準Javaファイルメソッドを使用してファイルにアクセスできます(独自のコードを再利用するため)、アンドロイドリソースアクセスメソッドを使用する必要はありません。

私はこの方向で何かを達成するかもしれないと思った唯一の方法は、ファイルを/ resフォルダに置き、実行時に(たとえば最初の実行時に)ファイルシステムにコピーすることです。これには理由がないため、各ファイルのコピーが2つあるという欠点があります。

別の方法として、私のアプリにサーバーからこれらのファイルをダウンロードさせることもできます(このオプションは別の回答でも見ました)。これは可能ですが、私はそのような簡単な作業のためにファイルサーバーを設置する必要はありません。

私の理解によれば、DDMSはここでは手助けしません。アプリケーションがインストールされた後

私の最初の目標(標準のJavaメソッドを使用してファイルにアクセスする)を達成する別の方法はありますか?そうでない場合、ファイルシステムにファイルを置くためのクリーンな方法がありますか?

ありがとうございます!

答えて

1

私は重複を避けることを考えることができる3つの方法があります:あなたはRES /生のフォルダを使用して説明したように

  1. が。既存のコードの使用でFileの代わりにInputStreamを使用し、Resources.openRawResource()を使用すると重複を避けることができます。
  2. assetsフォルダを使用し、AssetManager.openNotAssetFd()を使用してファイルを使用してファイルにアクセスします。この場合も、Streams not Fileクラスを使用する必要があります。アセットがメモリマップされているため、ファイルが圧縮されていると少しばかり気になることがあります。
  3. コードが実際にFileに関連付けられている場合(これを使用してInputStreamを開くだけではありません)。重複を避けるため、ファイルを初めて実行したときにWebからファイルをダウンロードし、外部ストレージに保存することができます。
+0

ありがとうございました!あなたの回答から、私は実際にこれを行うための "正しい"方法がないことを知ります。私が必要としていたのは、プロジェクトの外から(いくつかのファイルのセットだけではなく)作成された完全なディレクトリ構造だったので、Assetメカニズムを使うのが正しい方法だったようです。今のところ、私はそれらをファイルシステムに再帰的にコピーしただけです(重複が起こります)。彼らが大きくなりすぎると、ウェブからダウンロードするように切り替えるでしょう。再度、感謝します! – DannyA

1

あなたは、生の/ resを/の下にファイルを配置し、使用することができます。

Resources res = context.getResources(); 
InputStream in_s = res.openRawResource(R.raw.myfile); 

それとも、Fileオブジェクト

File f = new File(context.getResources().openRawResource(R.raw.myfile)); 

をしたい場合は、あなたが通常のJava APIを使用することができますあなたのファイルで作業してください。

関連する問題