#この記事の概要
Androidでファイル入出力する方法について自分用にまとめます。
#基本
##Javaのファイル入出力の流れ
1.パスとファイル名を指定してFileインスタンスを生成します。
2.Fileインスタンスを引数にしてFileReader/FileWriterインスタンスを生成します。
文字列を上書きするか追記するかを指定することができる。
FileWriterのコンストラクタの第二引数に
trueを指定・・・「追記」
falseを指定・・・「上書き」
3.FileReader/FileWriterインスタンスを引数にBufferedReader/BufferedWriterインスタンスを生成します。
4.BufferedReaderインスタンスのreadLine()メソッドで文字列を読み込みます。
BufferedWriterインスタンスのwrite()メソッドで文字列をファイルに書き込みます。
(すぐに書き込まれない可能性があるのでflush()メソッドを読んでおくと良い)
5.読み込み/書き込み終わったらclose()メソッドでファイルを閉じます。
##Androidのファイル入出力の流れ
基本的にはJavaのファイル入出力の流れと同じですが、項番1と2が異なります。
- ファイルオープンがFileクラスのコンストラクタではなく、ContextのopenFileOutput()メソッド、openFileInput()メソッドになります。
- 2がFileWriterではなく、OutputStreamWriterになる。
1.ファイル名を指定して上記のファイルオープンメソッド(openFileOutput()/openFileInput())を呼びます。
2.1で取得したFileInputStream/FileOutputStreamインスタンスを引数にしてInputStreamReader/OutputStreamWriterのインスタンスを生成します。
3.InputStreamReader/OutputStreamWriterインスタンスを引数にBufferedReader/BufferedWriterインスタンスを生成します。
4.BufferedReaderインスタンスのreadLine()メソッドで文字列を読み込みます。
BufferedWriterインスタンスのwrite()メソッドで文字列をファイルに書き込みます。
(すぐに書き込まれない可能性があるのでflush()メソッドを読んでおくと良い)
5.読み込み/書き込み終わったらclose()メソッドでファイルを閉じます。
// FileInputStreamクラスはInputStreamクラスを継承しているため、InputStreamクラスで受け取るのが普通かも?
FileInputStream fileInputStream = openFileInput("FileOutputStream.txt");
bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream, "UTF-8"));
String lineBuffer = bufferedReader.readLine();
// 読込できた場合はメモリに保持する
while (lineBuffer != null) {
stringBuilder.append(lineBuffer);
// 次の行があれば、改行コードを挿入
if ((lineBuffer = bufferedReader.readLine()) != null) {
stringBuilder.append(BR);
}
}
ファイル出力
###ファイル出力の種類
- Android標準
- Java標準
- FileWriter
- BufferedWriter
- FileWriterの拡張クラス
- 特徴
- newLine()メソッド・・・プログラムを実行している環境にあった改行コードを生成してくれる。
- close()メソッド・・・BufferedWriterでクローズし、FileWriterではクローズしない。
- 特徴
- FileWriterの拡張クラス
- PrintWriter
- BufferedWriterの拡張クラス
- 特徴
- print()メソッド・・・write()メソッドは文字列しか引数に指定できないので、自前でString型に変換する必要があるが、print()メソッドはint型やboolean型の値も引数に指定することができる。
- println()メソッド・・・print()メソッドの改行あり版(改行コードは環境に合わせた物を使用してくれる)
- close()メソッド・・・PrintWriterでクローズし、BufferedWriterやFileWriterではクローズしない。
- 特徴
- BufferedWriterの拡張クラス
ファイル読込
###ファイル読込の種類
- Android標準
- Java標準
- FileReader
- 特徴
- read()メソッド・・・一文字ずつ読み込むため、普段使用することはない...。
- 特徴
- BufferedReader
- FileReaderの拡張クラス
- 特徴
- read()メソッド・・・一文字ずつ読み込む。
- readLine()メソッド・・・一行ずつ読み込む。
- close()メソッド・・・BufferedReaderでクローズし、FileReaderではクローズしない。
- 特徴
- FileReaderの拡張クラス
- FileReader