SSブログ

Androidプログラミングの基礎[6] ファイル入出力 [Android]

今回のテーマは「ストレージへのファイル入出力」です。

第6回: ストレージへのファイル入出力

Androidが管理するさまざまなストレージに対するファイルの入出力方法について説明する。

1.内部ストレージへのファイル入出力

◎ ストリームの取得手段

openFileOutput メソッド

機能 ファイルに書き込むための出力すストリームを取得
書式 FileOutputStream openFileOutput( Sting name, int mode )
引数 name : 書き込むファイル名
mode : 操作モード
MODE_PRIVATE : ジアプリケーションのみアクセス可能
MODE_APPEND : 追加書き込みモードで開く
MODE_WORLD_READABLE : 他のアプリケーションから読み書き可能
MODe_WPRLD_WRITABLE : 他のアプリケーションから書き込み可能

name にファイルパスを記述することはできず、ファイルパスは、「/data/data/<パッケージ名>/files」固定となる。

openFileInput メソッド

機能 ファイルから読み込むための入出力ストリームを取得
書式 FileInputStream openFileInput( Sting name )
引数 name : 書き込むファイル名

◎ サンプル

テキストの読み書きを行うアプリケーションを作成する。

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 InternalIO
プロジェクト名 InternalIO
パッケージ名 jp.andsys.android.internalio
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 InternalIOActivity
レイアウト名 main
ナビゲーション・タイプ None

main.xml の編集

”InternalIOres/res/layout/main.xml”

image

InternalIOActivity.java の編集

”InternalIO/src/jp/andsys/android/internalio/InternalIOActivity”

image

⇒ ファイルへの書き込み

fos = openFileOutput(FILENAME, MODE_PRIVATE);
fos.write(memoText.getText().toString().getBytes());

⇒ ファイルからの読み込み

fis = openFileInput(FILENAME);
byte[] readBytes = new byte[fis.available()];

⇒ 実行

テキストボックスに文字を入力し「SAVE」ボタンを押します。

image

確認

① DDMSパースペクティブを開く

Eclipseメニューから「ウインドウ」、「パースペクティブを開く」、「その他」を実行し、「DDMS」を選択し「OK」ボタンを押す。

② エミュレータの選択

「デバイス」タブでデバッグ対象のエミュレータまたは端末を選択します。次に右側の「ファイル・エクスプローラ」を選択し”data/data/jp.andsys/android/internalio/files”ホルダーを開き、memo.txtファイルがあることを確認します。

image

③ ファイルのダウンロード

memo.txtを選択し、「端末からファイルを取得」ボタンを押します。

image

④ ファイルを開いて内容を確認する。

image

 

2.他のアプリケーションのファイルへのアクセス

◎ サンプル

InternalIOで作成したファイルを読み込むアプリケーションを作成する。

InternalIOで書き込んだファイルを、他のファイルから読み込めるように権限を変更する。

InternalIOActivity.java の編集

”InternalIO/src/jp/andsys/android/internalio/InternalIOActivity”

image

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 OtherAppIO
プロジェクト名 OtherAppIO
パッケージ名 jp.andsys.android.otherappio
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 OtherAppIOActivity
レイアウト名 main
ナビゲーション・タイプ None

main.xml の編集

”OtheAppIO/res/layout/main.xml”

image

OtheAppIO.java の編集

”OtheAppIO/src/jp/andsys/android/othrappio/OtheAppIOActivity”

image

createPackageContext メソッド

機能 パッケージ名を指定してコンテキストを生成する
書式 Context createPackageContext ( String packageName name, int flags )
引数 PackageName : パッケージ名
flags : セキュリティのためのフラグ
CONTEXT_INCLUDE_MODE : 生成するコンテキストに対するセキュリティを有効にする
CONTEXT_IGNORE_MODE : 生成するコンテキストに対するセキュリティをすべて無視する

⇒ 実行

ファイルを読み込んで表示できました。

image

 

3.外部ストレージへのファイル入出力

外部ストレージとは多くの場合取り外し可能なSDカードとなっているが、携帯端末よっていは取り外し不可能な内部のメモリ領域が外部ストレージとなっていいることがある。

⇒ 外部ストレージのセキュリティ

セキュリティ保護はありません、外部ストレージに保存されたファイルはすべてのアプリケーションから読み書きが可能。

⇒ 外部ストレージのチェック

使用する前に使用可能か確認する。メディアがマウントされ、認識されているか、リードオンリーになっていないか、等チェックする必要がある。

⇒ Environmentクラスとは

Environmentクラス(android.os.Environment)はシステム環境へのアクセスを提供している。

Environmentの主なメソッド

メソッド 解説
String getExternalStotageState メインの外部ストレージの現在の状態を返す
File getExternalStorageDirectory 外部ストレージのディレクトリを取得する
File getDataDirectory データディレクトリを取得
File getDownloadCacheDirectory ダウンロードキャッシュ用のディレクトリを取得

◎ サンプル

テキストボックスに入力した内容を外部ストレージにファイルとして保存および、それを読みだして表示する。

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 ExternalIO
プロジェクト名 ExternalIO
パッケージ名 jp.andsys.android.externalio
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 ExternalIOActivity
レイアウト名 main
ナビゲーション・タイプ None

AndroidManifest.xml の編集

”ExternalIO/AndroidManifest.xml”

パーミッションを記述

image

main.xml の編集

”ExternalIO/res/layout/main.xml”

image

OtheAppIO.java の編集

”ExternalIO/src/jp/andsys/android/externalio/ExternalIOActivity”

image

image

image

⇒ 外部ストレージのチェック

getExternalStorageStateメソッド 戻り値

戻り値 解説
MEDIA_BAD_REMOVAL アンマウントされる前にメディアが取り出された
MEDIA_CHECKING メディアが存在しディスクチェック中
MEDIA_MOUNTED メディアが存在し読み取り/書き込みアクセスでマウントされている
MEDIA_MOUNTED_READ_ONLY メディアが存在し読み取り専用アクセスでマウントされている
MEDIA_NOFS ディアが存在するが空になっているかサポートされていないファイルシステムを使用しています
MEDIA_REMOVED メディアが存在しない
MEDIA_SHARED メディアがマウントされずUSBマスストレージとして共有されている
MEDIA_UNMOUNTABLE メディアが存在するがマウントできない
MEDIA_UNMOUNTED メディアが存在するがマウントされていない

⇒ 外部ストレージのパスを取得する

getExternalStorageDirectoryメソッドでパスを取得する。エミュレータではルートフォルダとして「/sdcard」が取得できる。

ファイルは外部ストレージフォルダ以下の「/Android/data/<パッケージ名>/files/」フォルダに書き込む。

実行

テキストを「save」および「load」した

image

ファイルは以下にできた。

image

ファイルをテキストエディタで開いた。

image

以上で「ストレージへのファイル入出力」を終了します。

 

本記事は以下の参考書を元にしています。


nice!(0)  コメント(0)  トラックバック(1) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 1

WordPress Plugin [WP..WordPress Plugin [My.. ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。