SDカードのファイルの読み込みと書き込み (SDカード内のファイルの読み書き)

UI

下図のUIを用意します。Buttonを2つ EditTextを2つ用います。


コード

ファイル書き込みボタンのonClickイベント

public void button2_onClick(View view){
  EditText et = (EditText)findViewById(R.id.editText1);
    	
  String SDFile = android.os.Environment.getExternalStorageDirectory().getPath()
    + "/iPentec.SDCardFileAccess/memo.txt";
  File file = new File(SDFile);
  file.getParentFile().mkdir();
       
  try{
    FileOutputStream fos = new FileOutputStream(file,true);
    OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
    PrintWriter pw = new PrintWriter(osw);
    			
    String str = et.getText().toString();
    pw.append(str);
    		
    pw.close();
    osw.close();
    fos.close();
  }
  catch(FileNotFoundException e){
    e.printStackTrace();
  }
  catch(UnsupportedEncodingException e){
    e.printStackTrace();
  } 
  catch(IOException e){
    e.printStackTrace();
  }
}

解説

SDカードへ保存するファイル名を設定します。SDカードのディレクトリパスはandroid.os.Environment.getExternalStorageDirectory().getPath()で取得します。直接/mnt/sdcardを指定してもファイルの読み書きはできますが機種によりSDカードのマウント先ディレクトリ名が違うためgetExternalStorageDirectory()メソッドを使うほうが良いです。
  String SDFile = android.os.Environment.getExternalStorageDirectory().getPath()
    + "/iPentec.SDCardFileAccess/memo.txt";

ファイルクラスを作成します。また指定したファイル名を保存するディレクトリを作成します。
  File file = new File(SDFile);
  file.getParentFile().mkdir();

ストリーム、ストリームライターを準備します。
  FileOutputStream fos = new FileOutputStream(file,true);
  OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
  PrintWriter pw = new PrintWriter(osw);

テキストボックスの内容をPrintWriterを使ってファイルに書き込みます。
  String str = et.getText().toString();
  pw.append(str);

ストリームライターとストリームを閉じます。
  pw.close();
  osw.close();
  fos.close();

ファイル読み込みボタンのonClickイベント

public void button3_onClick(View view){
  EditText et = (EditText)findViewById(R.id.editText2);
    	
  String SDFile = android.os.Environment.getExternalStorageDirectory().getPath() 
    + "/iPentec.SDCardFileAccess/memo.txt";
  File file = new File(SDFile);
       
  try{
    FileInputStream fis = new FileInputStream(file);
    InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
    BufferedReader br= new BufferedReader(isr);
    String s;
    while ((s = br.readLine() ) != null){
      et.append(s);
      et.append("\r\n");
    }
    		
    br.close();
    isr.close();
    fis.close();   		
  }
  catch(FileNotFoundException e){
    e.printStackTrace();
  }
  catch(UnsupportedEncodingException e){
    e.printStackTrace();
  }
  catch (IOException e) {
    e.printStackTrace();
  }
}

解説

SDカードのファイル名を設定し、ファイルクラスを作成します。書き込みの場合と同様に、SDカードのディレクトリはgetExternalStorageDirectory()メソッドで取得します。
  String SDFile = android.os.Environment.getExternalStorageDirectory().getPath() 
    + "/iPentec.SDCardFileAccess/memo.txt";
  File file = new File(SDFile);

ファイルストリームやストリームリーダーを準備します。
  FileInputStream fis = new FileInputStream(file);
  InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
  BufferedReader br= new BufferedReader(isr);

BufferedReaderを用い1行ずつファイルから読み込みます。読み取った文字列をテキストボックスに表示します。
  String s;
  while ((s = br.readLine() ) != null){
    et.append(s);
    et.append("\r\n");
  }

ストリームとストリームリーダーを閉じます。
  br.close();
  isr.close();
  fis.close();   		

パーミッションの設定

SDカードに情報を書き込むためには、"android.permission.WRITE_EXTERNAL_STORAGE"のパーミッションが必要です。AndroidManifest.xmlファイルの編集画面で"uses-permission"要素を追加して"android.permission.WRITE_EXTERNAL_STORAGE"を許可する必要があります。


XMLファイルを直接編集する場合は以下のコードをAndroidManifest.xmlファイルに追記します。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

アプリケーションの実行

アプリケーションを起動します。下図の画面が表示されます。


上部のテキストボックスに値を入力し保存ボタン(Write Fileボタン)を押します。SDカードにファイルが作成されテキストボックスに入力した内容が保存されます。


読み込みボタン(Read Fileボタン)を押します。SDカードにあるファイルを読み込みファイルの内容を下のテキストボックスに表示します。先ほど保存した内容がテキストボックスに表示されました。


SDカードへファイルの読み書きができます。

著者
iPentecのプログラマー、最近はAIの積極的な活用にも取り組み中。
とっても恥ずかしがり。
掲載日: 2011-08-24
iPentec all rights reserverd.