5
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

(書きかけの記事)Androidでファイル入出力

この記事の概要

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ではクローズしない。
    • PrintWriter
      • BufferedWriterの拡張クラス
        • 特徴
          • print()メソッド・・・write()メソッドは文字列しか引数に指定できないので、自前でString型に変換する必要があるが、print()メソッドはint型やboolean型の値も引数に指定することができる。
          • println()メソッド・・・print()メソッドの改行あり版(改行コードは環境に合わせた物を使用してくれる)
          • close()メソッド・・・PrintWriterでクローズし、BufferedWriterやFileWriterではクローズしない。

ファイル読込

ファイル読込の種類

  • Android標準
  • Java標準
    • FileReader
      • 特徴
        • read()メソッド・・・一文字ずつ読み込むため、普段使用することはない...。
    • BufferedReader
      • FileReaderの拡張クラス
        • 特徴
          • read()メソッド・・・一文字ずつ読み込む。
          • readLine()メソッド・・・一行ずつ読み込む。
          • close()メソッド・・・BufferedReaderでクローズし、FileReaderではクローズしない。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
5
Help us understand the problem. What are the problem?