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関連記事など。








コメント