内部ストレージを利用したファイル操作
Androidアプリ開発におけるファイルの読み書きは、内部ストレージを活用することで安全に実装できます。アプリ専用のディレクトリに保存することで、他のアプリからのアクセスを防げます。
実装の流れ
基本的な実装は以下の要素から構成されます。まずファイルオブジェクトの生成を行い、その後に出力ストリームを使った書き込み、入力ストリームを使った読み込みを行います。
1. ファイルオブジェクトの準備
コンテキストのgetFilesDir()メソッドで取得したディレクトリを基準に、ファイルを指定します。
// 対象ファイルの定義
String targetFile = "sample_data.txt";
File dataFile = new File(getFilesDir(), targetFile);
2. データの書き込み処理
openFileOutput()を使用してファイル出力ストリームを取得します。try-with-resources構文を用いることで、自動的にリソースの解放が行えます。MODE_PRIVATEを指定することで、ファイルはアプリ内でのみアクセス可能になります。
// 書き込み内容の準備
String content = "サンプルテキストデータ";
// ファイルへの書き込み実行
try (FileOutputStream outputStream = openFileOutput(targetFile, MODE_PRIVATE)) {
outputStream.write(content.getBytes(StandardCharsets.UTF_8));
Log.d("FileWrite", "データ書き込み成功");
} catch (IOException e) {
Log.e("FileWrite", "書き込みエラー発生", e);
}
3. データの読み込み処理
openFileInput()でファイル入力ストリームを開き、バッファを使って効率的にデータを読み取ります。ByteArrayOutputStreamを活用することで、可変長のデータを柔軟に処理できます。
// ファイルからのデータ読み込み
try (FileInputStream inputStream = openFileInput(targetFile)) {
ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesRead;
// バッファを使用した効率的な読み込み
while ((bytesRead = inputStream.read(buffer)) != -1) {
byteArrayStream.write(buffer, 0, bytesRead);
}
// バイトデータを文字列に変換
String loadedData = byteArrayStream.toString(StandardCharsets.UTF_8.name());
Log.d("FileRead", "読み込み成功: " + loadedData);
} catch (IOException e) {
Log.e("FileRead", "読み込みエラー発生", e);
}
権限に関する注意点
内部ストレージへのアクセスは特別な権限を必要としませんが、Android 6.0以降、外部ストレージを使用する場合は実行時パーミッションの処理が必要です。対象のAndroidバージョンに応じて適切な権限管理を実装してください。