Androidのアプリ開発において活躍するファイルの保存・読み込み方法を2つ紹介します。アプリ内で使用する設定ファイルやテキストの保存・読み込みに活用できます。
Androidアプリにおけるファイル保存について
Androidのファイルの保存先(ストレージ)は以下の3種類あります。
- アプリ内内部ストレージ
- アプリ内外部ストレージ
- 共有ストレージ
今回は設定ファイルを保存する想定で、他アプリから読み込まれない内部ストレージに保存するサンプルを作成しました。
ファイルの保存・読み込むのサンプル(Kotlin)
テキストファイルを保存、読み取りをします。
サンプル①:FileWriterを使う方法
ファイルの保存先は、applicationContext.filesDirで取得できます。
取得されるパスは「/data/user/0/パッケージ名/files」になります。
class MainActivity : AppCompatActivity() { //ファイル変数を宣言 private lateinit var txtfile: File override fun onCreate(savedInstanceState: Bundle?) { /* 色々省略 */ // ファイル名 val filename="testfile.txt" //ファイル変数にパスとファイル名を設定 txtfile = File(applicationContext.filesDir, filename) } } /*以下ファイル保存・読み取りメソッド(ボタンタップなどで呼び出す)------------------*/ //ファイルの保存(保存したい文字列savetextを受け取る) private fun saveFile(savetext:String?){ try{ // ファイルの書き込み FileWriter(txtfile).use{ stream -> stream.write(savetext) } }catch (e: IOException){ Log.d("Error","File Save Error!") } } //ファイルの読み込み(読み取った文字列readtextを返す) private fun readFile():String?{ //読み取った内容を変数textに書き込む var readtext: String? = null try{ BufferedReader(FileReader(txtfile)).use { br -> readtext = br.readLine() } }catch(e: IOException){ Log.d("Error","File Read Error!") } return readtext }
サンプル②:openFileOutput,openFileInputを使う方法
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { /* 色々省略 */ // ファイル名 val filename="testfile.txt" } } /*以下ファイル保存・読み取りメソッド(ボタンタップなどで呼び出す)------------------*/ //ファイルの保存(保存したい文字列savetextを受け取る) private fun saveFile(savetext:String){ try{ openFileOutput( filename, Context.MODE_PRIVATE).use{ fileOutputstream -> fileOutputstream.write(savetext.toByteArray())} }catch (e: IOException){ Log.d("Error","File Save Error!") } } //ファイルの読み込み(読み取った文字列readtextを返す) private fun readFile():String?{ var readtext: String? = null try{ openFileInput(filename).use{ fileInputStream -> BufferedReader(InputStreamReader(fileInputStream, StandardCharsets.UTF_8)).use { reader -> var lineBuffer: String? while(br.readLine().also{ br = it} != null){ readtext = lineBuffer } }} }catch(e: IOException){ Log.d("Error","File Read Error!") } return readtext }
さいごに
2つの方法を紹介しましたが、個人的には差をあまり感じません。スコープ関数の少ないほうが自分は記載がしやすいかな。。。
以下Android関連記事など。
コメント