内部、外部ストレージにファイルを読み書きする例を紹介します。
内部、外部ストレージ
アプリの内部では、外部ストレージとは、次のパスを意味し、すべての権限なしに使用することができるアプリのデータ空間です。
- 内部ストレージ:/data/data/[package name]
- 外部ストレージ:/storage/emulated/0/Android/data/[package name]
内部、外部ストレージのパスは、次のAPIを利用して得ることができます。
- 内部ストレージ:Context.getFilesDir()
- 外部ストレージ:Context.getExternalFilesDir(null)
ストアの詳細については、アプリデータフォルダのパスと内部/外部ストレージの説明を参照してください。
ファイル入出力
Byte単位のデータを読み書きするには、以下のクラスを利用します。
- FileInputStream, FileOutputStream
- BufferedInputStream, BufferedoutputStream
Stringデータを読み書きするには、以下のクラスを使用してください。
- FileReader, FileWiter
- BufferedReader, BufferedWriter
この記事では、BufferedReader、BufferedWriterを利用して、Textを読み書き例を作ってみましょう。
一般的に、FileReaderよりBufferedReaderを使用することを性能にお勧めします。 BufferedReaderの詳細については、Java - BufferedReader、BufferedWriter例を参照してください。
ファイルの書き込みの例
次のように内部ストレージのファイルに文字列を格納することができます。 close()
を呼び出すと、 append()
で入力された文字列がファイルに保存されます。
val filePath = filesDir.path + "/myText.txt"
Log.d("Test", "path : $filePath")
writeTextToFile(filePath)
fun writeTextToFile(path: String) {
val file = File(path)
val fileWriter = FileWriter(file, false)
val bufferedWriter = BufferedWriter(fileWriter)
bufferedWriter.append("Test1\n")
bufferedWriter.append("Test2")
bufferedWriter.newLine()
bufferedWriter.append("Test3\n")
bufferedWriter.close()
}
実行してみると次のようなパスに保存されます。
12-23 20:22:34.110 5218 5218 D Test : path : /data/user/0/com.example.app/files/myText.txt
次のように内部ストレージにファイルが保存されていることを確認することもできます。
generic_x86_arm:/data/data/com.example.app/files # cat myText.txt
Test1
Test2
Test3
ファイルの読み取りの例
次のように内部ストレージに保存されたファイルを読み取ることができます。 readlines()
と forEach()
を利用して、line単位で文字列を読み取ることができます。
val filePath = filesDir.path + "/myText.txt"
readTextFromFile(filePath)
fun readTextFromFile(path: String) {
val file = File(path)
val fileReader = FileReader(file)
val bufferedReader = BufferedReader(fileReader)
bufferedReader.readLines().forEach() {
Log.d("Test", it)
}
}
外部ストレージのファイルの読み書き
次のように外部ストレージのパスのみ引数として渡す必要がある。
val filePath = getExternalFilesDir(null)!!.path + "/myText.txt"
Log.d("Test", "path : $filePath")
writeTextToFile(filePath)
readTextFromFile(filePath)
上記のコードを実行してみると次のようなパスのファイルを保存して読み取ります。
12-23 20:27:46.277 5365 5365 D Test : path : /storage/emulated/0/Android/data/com.example.app/files/myText.txt
12-23 20:27:46.282 5365 5365 D Test : Test1
12-23 20:27:46.282 5365 5365 D Test : Test2
12-23 20:27:46.283 5365 5365 D Test : Test3
getExternalFilesDir() API
デバイスをPCに接続したときは、PCからデバイスのストレージ容量を見ることができますよ。そのRoot pathが storage/emulated/0/
です。
/storage/emulated/0/Android/data/
は、外付けのスペースでアプリの専用データフォルダに割り当てられている空間です。
このフォルダのPathは、 getExternalFilesDir(null)
にインポートすることができます。
引数としてnullを渡すと、 "../files/"
が返され、引数として Environment.DIRECTORY_MUSIC
をめくる"../files/Music"
の形で返されます。
val appMusicDir = getExternalFilesDir(Environment.DIRECTORY_MUSIC)
Log.d("Test", "path : ${appMusicDir!!.path}")
Output:
12-23 20:52:50.630 5590 5590 D Test : path : /storage/emulated/0/Android/data/com.example.example/files/Music
DIRECTORY_MUSIC
加えて、次のようなものを引数として渡すことができます。
- Environment.DIRECTORY_MUSIC
- Environment.DIRECTORY_PODCASTS
- Environment.DIRECTORY_RINGTONES
- Environment.DIRECTORY_ALARMS
- Environment.DIRECTORY_NOTIFICATIONS
- Environment.DIRECTORY_PICTURES
- Environment.DIRECTORY_MOVIES
Related Posts
- Android - FusedLocationProviderClientに位置情報を取得する
- Android - GPS、Network位置情報を取得する(LocationManager)
- Android - adbコマンドでActivity実行
- アンドロイド - MediaStoreにメディアファイルを保存する方法
- Android - Runtime permissionリクエスト方法と例(kotlin)
- Android11 - Storage(ストレージ)の変更まとめ
- Jetpack Compose - RowとColumn
- Android 13 - 細かいメディアファイルの権限
- Android 13でNotification権限をリクエスト、通知を表示する
- エラー解決:android gradle plugin requires java 11 to run. you are currently using java 1.8.
- Query method parameters should either be a type that can be converted into a database column or a List
- Android - TabLayoutの実装方法(+ ViewPager2)
- Android - adbコマンドで特定のパッケージのプロセスの終了
- Android - adb push、pullでファイルのコピー、ダウンロード
- Android - adbコマンドでsettings value確認、変更、
- Android 12 - IntentFilterのexported明示的な宣言
- Android - adb logcatコマンドでログ出力
- Android - ACTION_BOOT_COMPLETEDイベント受信
- Android - Foreground Service実行
- Android - ファイル入出力の例(Read、Write、内部、外部ストレージ)
- Android - アプリの権限を確認(Permission check)
- Android - adbで実行中のプロセス、スレッドリスト及びメモリ情報の確認
- Android - Broadcast Receiver登録およびイベントの受信方法
- Android - Cleartext HTTP ... not permitted例外解決方法
- Androidのビルドエラー - Calls to Java default methods are prohibited in JVM target 1.6
- アンドロイド - Assetsでファイルを読み取る方法
- アンドロイドのさまざまなNotification種類と実装方法
- アンドロイド - INSTALL_FAILED_TEST_ONLYエラー解決方法
- Android EspressoのCustom Matcher実装方法
- Android Espressoを使用してUIをテストする方法(3)
- アンドロイド - CTS hostsideをgradleで構築する方法
- Androidのアプリのデータフォルダーのパスと内部/外部ストレージ説明
- アンドロイド - 最初のApp作成
- Androidをインストールする方法(Windows)