Android では、データを保存する方法として、以下の5通りの方法があります:
- デバイス内にファイルとして保存する
- SharedPreferences を使用して保存する
- SQLite を使用して保存する
- SDカード等の外部ストレージにファイルとして保存する
- ネットワーク越しにサーバにデータを送って保存する
この中で、今回は 1. のデバイス内にファイルとして保存する方法を見てみます。
デバイス内のファイルへのデータの保存
Android SDK に含まれる Context クラスには、openFileOutput() というメソッドが用意されています。このメソッドは、指定されたファイルを書き出し用にオープンし、FileOutputStream を返します。書式は以下の通りです:
FileOutputStream openFileOutput(String name, int mode)
name はオープンするファイル名、mode はファイルの生成モードを指定します。mode では以下の値が指定できます。
モード | 説明 |
---|---|
MODE_PRIVATE | ファイルを作成したアプリケーションからのみ読み出せるファイルを作成する。(デフォルト動作) |
MODE_APPEND | 既存のファイルに追記する。 |
モードを表す上記定数は Context クラスで定義されています。
MODE_PRIVATE はデフォルト値なので、MODE_APPEND を指定した場合は、MODE_PRIVATE で且つ MODE_APPEND ということになります。
また、他のアプリからも読み書きができるファイルを作成するための MODE_WORLD_READABLE / MODE_WORLD_WRITABLE という定数も定義されていましたが、他のアプリからアクセスできるファイルを作成するのは色々と問題があるということで、ここれらの定数は API level 17 で Deprecated (非推奨)となりました。ですので、実質的にはいつも MODE_PRIVATE でファイルをオープンすることになります。
指定したファイルのオープンに失敗した場合は FileNotFoundException をスローします。
このメソッドでファイルをオープンした後の処理は、通常の Java のファイル操作と同様ですので、例えば以下のような形でデータを書き出します。
try { FileOutputStream fos = openFileOutput("data.txt", MODE_PRIVATE); OutputStreamWriter osw = new OutputStreamWriter(fos); BufferedWriter writer = new BufferedWriter(osw); writer.write("Hello, world!"); writer.close(); } catch (FileNotFoundException e) { // 例外処理 } catch (IOException e) { // 例外処理 }
デバイス内に保存したファイルからのデータの読み出し
Android SDK に含まれる Context クラスには、openFileInput() というメソッドが用意されています。このメソッドは、指定されたファイルを読み出し用にオープンし、FileInputStream を返します。書式は以下の通りです:
FileInputStream openFileInput(String name)
name ではオープンするファイル名を指定します。
指定したファイルのオープンに失敗した場合は FileNotFoundException をスローします。
このメソッドでファイルをオープンした後の処理は、通常の Java のファイル操作と同様ですので、例えば以下のような形でデータを読み出します。
try { FileInputStream fis = openFileInput("data.txt"); InputStreamReader isr = new InputStreamReader(fis); BufferedReader reader = new BufferedReader(isr); String text = reader.readLine(); // 何らかの処理 } catch (FileNotFoundException e) { // 例外処理 } catch (IOException e) { // 例外処理 }
参照
公式サイトの説明ページ: Context | Android Developers