liguofeng29’s blog

個人勉強用ブログだっす。

AndroidのIO - openFileInputとopenFileOutput

Androidjava標準IO以外に専用のIO APIを提供している。

Contextが提供するIOストリーム

  • FileInputStream openFileInput(String name)
  • FileOutputStream openFileInput(String name, int mode)
    • MODE_PRIVATE
    • MODE_APPEND
    • MODE_WORLD_READABLE
    • MODE_WORLD_WRITEABLE
  • getDir(String name, int mode) : アプリデータファイルを取得か生成
  • File getFilesDir() : アプリデータファイル絶対パス
  • String[] fileList() : アプリデータフォルダ配下の全ファイル
  • deleteFile(String) : 指定ファイル削除

※ Android4.2からはセキュリティ面でContext.MODE_WORLD_READABLEとContext.MODE_WORLD_WRITEABLEは推奨しない。 データを共有する場合は、ContextProviderを利用する。

サンプルコード

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="1">
    <EditText
        android:id="@+id/writeView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine"
        android:ems="10" />
    <Button
        android:id="@+id/writeBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="write"
        android:textAllCaps="false"
        android:textSize="20dp"
        android:onClick="clickTimePikcerBtn"/>
    <EditText
        android:id="@+id/readView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine"
        android:ems="10" />
    <Button
        android:id="@+id/readBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="read"
        android:textAllCaps="false"
        android:textSize="20dp"
        android:onClick="clickTimePikcerBtn"/>
</LinearLayout>
package com.example.liguofeng.io;

import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    final String FILE_NAME = "abcd.bin";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button write = (Button) findViewById(R.id.writeBtn);
        write.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String text = ((EditText) findViewById(R.id.writeView)).getText().toString();

                try {
                    FileOutputStream stream = openFileOutput(FILE_NAME, MODE_PRIVATE);
                    PrintStream ps = new PrintStream(stream);
                    ps.println(text);
                    Toast.makeText(MainActivity.this, "書き込み完了", Toast.LENGTH_LONG).show();
                } catch (FileNotFoundException ex) {
                    ex.printStackTrace();
                }
            }
        });

        Button read = (Button) findViewById(R.id.readBtn);
        read.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try{
                    FileInputStream stream = openFileInput(FILE_NAME);
                    byte[] buff = new byte[1024];
                    int hasRead = 0;

                    StringBuilder sb = new StringBuilder();
                    while ((hasRead = stream.read(buff)) > 0) {
                        sb.append(new String(buff, 0 , hasRead));
                    }

                    stream.close();;

                    ((EditText) findViewById(R.id.readView)).setText(sb.toString());
                    Toast.makeText(MainActivity.this, "読み込み完了", Toast.LENGTH_LONG).show();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        });
    }
}

http://f.st-hatena.com/images/fotolife/l/liguofeng29/20151223/20151223213710.gif?1450874460