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”
InternalIOActivity.java の編集
”InternalIO/src/jp/andsys/android/internalio/InternalIOActivity”
⇒ ファイルへの書き込み
fos = openFileOutput(FILENAME, MODE_PRIVATE);
fos.write(memoText.getText().toString().getBytes());
⇒ ファイルからの読み込み
fis = openFileInput(FILENAME);
byte[] readBytes = new byte[fis.available()];
⇒ 実行
テキストボックスに文字を入力し「SAVE」ボタンを押します。
確認
① DDMSパースペクティブを開く
Eclipseメニューから「ウインドウ」、「パースペクティブを開く」、「その他」を実行し、「DDMS」を選択し「OK」ボタンを押す。
② エミュレータの選択
「デバイス」タブでデバッグ対象のエミュレータまたは端末を選択します。次に右側の「ファイル・エクスプローラ」を選択し”data/data/jp.andsys/android/internalio/files”ホルダーを開き、memo.txtファイルがあることを確認します。
③ ファイルのダウンロード
memo.txtを選択し、「端末からファイルを取得」ボタンを押します。
④ ファイルを開いて内容を確認する。
2.他のアプリケーションのファイルへのアクセス
◎ サンプル
InternalIOで作成したファイルを読み込むアプリケーションを作成する。
InternalIOで書き込んだファイルを、他のファイルから読み込めるように権限を変更する。
InternalIOActivity.java の編集
”InternalIO/src/jp/andsys/android/internalio/InternalIOActivity”
プロジェクト設定
・新規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”
OtheAppIO.java の編集
”OtheAppIO/src/jp/andsys/android/othrappio/OtheAppIOActivity”
createPackageContext メソッド
機能 | パッケージ名を指定してコンテキストを生成する |
書式 | Context createPackageContext ( String packageName name, int flags ) |
引数 | PackageName : パッケージ名 flags : セキュリティのためのフラグ CONTEXT_INCLUDE_MODE : 生成するコンテキストに対するセキュリティを有効にする CONTEXT_IGNORE_MODE : 生成するコンテキストに対するセキュリティをすべて無視する |
⇒ 実行
ファイルを読み込んで表示できました。
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”
パーミッションを記述
main.xml の編集
”ExternalIO/res/layout/main.xml”
OtheAppIO.java の編集
”ExternalIO/src/jp/andsys/android/externalio/ExternalIOActivity”
⇒ 外部ストレージのチェック
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」した
ファイルは以下にできた。
ファイルをテキストエディタで開いた。
以上で「ストレージへのファイル入出力」を終了します。
本記事は以下の参考書を元にしています。
コメント 0