AndroidのIO - openFileInputとopenFileOutput
Androidはjava標準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(); } } }); } }