2013年11月2日土曜日

Androidアプリ開発:ファイル入出力 assetsディレクトリ

以前、ファイル入出力に躓いたことがありました。(Androidが複数ユーザー・ログインに対応した直後です)

Androidプログラム開発ーファイル入出力

その後、別のサンプルアプリでeclipseの開発環境内で、assets/ディレクトリがあることを知りました。どうもそこにファイルを配置しておくと簡単にアプリ側の設定等を入出力できるようです。(いつの間にかデフォルトでeclipseのAndroid開発環境に作成されるようになってました。気付かなかった。)

AssetManager assets = context.getAssets();  // 追加
reader = new BufferedReader(new InputStreamReader(assets.open(fileName)));

contextは例の如く、Androidプログラムの本体のインスタンスです。これで個々のアプリのファイルであるassets以下までのパスを供給してくれるようです。これなら簡単にこのアプリの設定ファイル等を作成できます。(一々、アクセス可能なファイルパスを考えなくてもすみます)

あと、最近気づいたんですが以下のデータクラスによるファイルアクセスはもう古い(?)スタイルなのでやめろとeclipseから注意されました。

DataInputStream in=new DataInputStream(context.getAssets().open(path));

どちらも同じ以下の関数で1行を読み込むんですが、何故か注意されます。

String line=in.readLine();

注意されるだけで動きには問題ないんですが、eclipse上で注意のマークが表示されるのが気になります。(古いというより、プリミティブな方法での入出力なので今後の変化に対応出来ない可能性があるからやめとけということですかね。)

PS:
後、assetsフォルダ以外にアプリ内でデータにアクセスする方法として以下の方法があります。(mResourcesは、import android.content.res.Resourcesにより提供されるクラスで、res/ディレクトリ以下の資源を扱うのに使われます)


InputStream is = this.mResources.openRawResource(R.raw.sample);

入力であるInputStreamの定義なんですが、ファイルの指定方法として引数に( R.raw.sample )を指定しています。これはeclipse開発環境内でいうと、res/raw/sample.daeというファイルを指定していることになります。これはこれで便利な方法です。(ただ.以下の拡張子が表示されない、それでも問題ないのがちょっと気になります。この例ではxmlファイルなんですが、R.raw.と入力した時点で、res/raw/以下のファイルがeclipseの補助機能により選択肢に表示されます。)

0 件のコメント:

コメントを投稿