最近、Kotlinの投稿ばかりなのでたまには違う話題も…(笑)

10月2度目の台風がいらした昨日、鵠沼海岸の埜庵に行ってきました♪
1年中かき氷で勝負をしているお店です。
最近はそういうお店も都内を中心に増えているようですが、やっぱり珍しいですよね。

レギュラーメニューの他、四季折々、季節の限定かき氷が楽しめます。

今は栗、柚子みかん、恵抹茶みるきんでした。

埜庵は席につく前に入口で注文します。

私は栗、旦那様は柚子みかんを注文
最近、別添えのシロップは数種類から選べるようになりました。
通常は練乳とヨーグルト練乳。時期によって違うバージョンの練乳もあるようです。
栗の場合はこれらの練乳か栗シロップを選ぶことができます。
お店のお姉さんに聞いてたら、やっぱり栗シロップがオススメということなので、そうしました。

お会計を終えると番号札をいただけるので好きな席に座って待ちましょう。

かき氷の店 埜庵

番号札も可愛いから、いつも写真撮っちゃうw

席について程なくかき氷が運ばれてきますー。
お手洗いとか行ってると、その間に運ばれてきてたりします。すぐ来ますw
お手洗い中で溶けちゃったりすると作り直してくれます。
が、コストを考えると申し訳ない気持ちになっちゃうので、お手洗いは食べたあとに行くようにしてます。

手前が栗、奥が柚子みかんです。

かき氷の店 埜庵
スポンサーリンク

栗。本当に美味しい。すごくすごく美味しい!
栗の風味がすごい。栗のつぶつぶも感じるのですが。本当に美味しい。

かき氷の店 埜庵 かき氷の店 埜庵

無糖の栗ペーストを使って甘さを調節しつつシロップにしているとのことで、絶妙な甘み。
この栗シロップ、スプーンですくってそのまま食べても美味しいです。
美味しすぎてニコニコルンルンしちゃいましたw
シェリー酒も添えられているのですが、これもまた合う。ちょっぴり大人風味になります。
これね、別添えのシロップはぜーったいに栗シロップがオススメ!
レジのお姉さん、ありがとう(笑)

旦那様も栗のかき氷に関しては半信半疑だったのですが、これは美味いと言ってました。
もう一回食べたいな(笑)

夏の埜庵は混雑がすごくて近づけませんが(整理券配布。午前中で配布終了する感じみたい)、
今の時期から春先まではゆったり楽しめるので、おすすめです。
定休日が時期や状況によって違うので、ホームページでご確認ください。
季節のメニューもホームページに載っています。
かき氷の店 埜庵

さて、引き続きデータの永続化について見ていきたいと思います。
今回はファイルを使った方法です。

Javaっぽい書き方とKotlinっぽい書き方を紹介してみたいと思います。
今回もプロジェクトは作らずにソースコードの紹介のみです。

もくじ

FileOutputStreamを使ってファイルに書き込もう
FileInputStreamを使ってファイルを読み込もう
Kotlin標準ライブラリを使ってファイルに書き込もう
Kotlin標準ライブラリを使ってファイルを読み込もう

FileOutputStreamを使ってファイルに書き込もう

まずは書き込みからやってみたいと思います。

Javaでファイル書き込みと言えばFileOutputStreamを使うのが定番で、Androidアプリに置いても使われているようです。
なのでまずはこちらのやり方から見ていきましょう。

ざっと書くと以下のようになります。

ContextクラスのメソッドであるopenFileOutput()を使ってFileOutputStreamを生成します。
Androidアプリではファイルの保存場所が決められているのですが、openFileOutput()を使うと保存場所を意識せずにファイルを作ることができます。
第一引数はファイル名、第二引数はモードを指定します。基本的にはContext.MODE_PRIVATEを使えばOKです。MODE_PRIVATE以外の定数も以前はありましたが、現在は非推奨になっているので、必ずMODE_PRIVATEを選択するようにしましょう。

あとは普通のFileOutputStreamと同じように使ってあげればOKです。

FileInputStreamを使ってファイルを読み込もう

ファイルの読み込みはFileInputStreamを使います。
ざっと書くと次のようになります。

ContextクラスのメソッドであるopenFileInput()を使ってFileInputStreamを生成します。
FileOutputStreamのときと同じように、openFileInput()を使うとファイルの保存場所を意識せずにファイルにアクセスできるようになります。
引数はファイル名です。

今回の例では一行ずつ取得しているので、BufferedReaderを使ってあげます。
val reader = inputStream.bufferedReader()のところで、BufferedReaderを生成しています。

その次のfor文ですが、Javaではよく次のように書かれます。

Kotlinはwhileの条件式の中に代入文を入れることができないのと、for eachの書き方が用意されているのでforを使って書いてあげます。

reader.readLines()で1行読み込んで、lineBufferに代入しています。
lineBufferはここではLogに出力しているだけですが、StringBufferに入れたりだとか用途に応じて使ってあげてください。

最後に一応BufferedReaderをクローズしてあげて終了です。
BufferedReaderを閉じてあげれば、FileInputStreamも閉じてくれるようです。

スポンサーリンク

Kotlin標準ライブラリを使ってファイルに書き込もう

次にKotlinの標準ライブラリを使った方法を見ていきたいと思います。

ひとまずソースを。

まずファイル名ですが、今回はファイルの保存場所を意識する必要があります。
といっても難しいことはなくて、保存場所はContextクラスのfilesDirプロパティで取得することができます。
なので、"$filesDir/hello.txt" というようにしてあげればOKです。

ファイルの操作を行うにはFileクラスを使ってあげます。File(fileName)というようにオブジェクトを作ってあげます。
あとは簡単で、writeTextメソッドを使えばさくっと書き込んでくれます。

FileOutputStreamを使うよりもスッキリかけていいですね。

Kotlin標準ライブラリを使ってファイルを読み込もう

では最後にKotlinの標準ライブラリを使ってファイルの読み込みのする方法をいきましょう。

まずソースを。

Fileの生成までは書き込みのときと同じです。

ファイルの中身を読み込むときですが、1行ずつの場合はforEachLineを使えばOKです。
イテレーターなのでちょっと特殊な書き方に思えますが、最後の行までループしてくれると思っておけばよいかと思います。
for文と違って、受け取る変数がないのですが、itというイテレーター専用の変数(ちょっと違うかも?)があるのでそれを使うと1行ずつのデータを受け取ることができます。
ここではitをログに出力しているだけですが、itをStringBufferに保存するなど用途に応じて使ってあげてください。

ファイルの読み込みもこちらのほうがFileInputStreamを使うよりもすっきりかけますね。

ソース量はKotlinの標準ライブラリを使ったほうが少なくなりますが、ファイルの場所をきちんと指定する必要があるなどのデメリットもあるので、どちらがいいのかは結局わかりません…。
どちらの書き方も知っておくと便利かなぁとは思います。