ファイルの読み書き

ディレクトリのファイルを読み書きする方法について紹介します。

ファイルの書き込み(作成)

FileOutputStreamインスタンスを作成し、write関数で書き込みます。ただし、書き込む文字列は必ずbyte型の配列に直さなければなりません。

これら処理を行ったのが次のソースです。

	
public class MainActivity extends Activity 
{
    
    private String topDirName = "MyApp_folder";
    private String fileName = "myapp_file";
    
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        File top_dir = getDir(topDirName, Context.MODE_PRIVATE);
            //アプリのデータ領域にディレクトリを作成
        
        String str = "content";
        try{
            FileOutputStream fos = new FileOutputStream(new File(topDir, fileName));
                //topDirがFileインスタンスで、fileNameがファイル名
            fos.write(content.getBytes(Charset.defaultCharset().name()));
                //ファイルにString型をbyte配列に変換したものを書きこみ
            fos.close();
                 //ストリームを閉じる。
        }catch(IOException err){}
    }
}

ディレクトリを作成してFileOutputStreamにディレクトリのFileインスタンスと作成するファイル名を渡します。

Charset.defaultCharset().name()

writeメソッドで書き込む際に上のようなメソッドを使用しましたが、これは文字コードをを環境に合わせて指定するためのものです。

ファイルの読み込み

次に先ほど作ったファイルを読み込んでみます。

コードは次のようになります。

public class MainActivity extends Activity 
{
    
    private String topDirName = "MyApp_folder";
    private String fileName = "myapp_file";
    
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        File topDir = getDir(topDirName, Context.MODE_PRIVATE);
        
        FileChannel fc;
            //ファイルの情報を保持するクラス
        byte buffer[];
        String read_str = null;
        try{
            FileInputStream fis = new FileInputStream(new File(topDir, fileName));
            fc = fis.getChannel();
            buffer = new byte[(int)fc.size()];
                //size関数でファイルのサイズを取得
            fis.read(buffer);
                //ファイルの初めからファイルの大きさ分だけbufferに読み込み
            readStr = new String(buffer, Charset.defaultCharset().name());
                //byte配列をString型に直す。
            fis.close();
        }catch(IOException err){}
    }
}

byte配列にいったん読み込んでからそれをString型に変換しています。

また、読み込みでも同じく次のように文字コードを指定しています。

readStr = new String(buffer, Charset.defaultCharset().name());
関連項目
プライバシーポリシー