【Android】【Java】SDカードにテキストファイルを保存する 
2014/06/23 Mon [edit]
保存もついでなので簡単なものを書いて置く。前回の「SDカードからテキストファイルを読み込む」のテスト用に使っても良いだろう。エミュレータ起動中なら DDMS を使っても確認することもできる。
考え方は、「内部ストレージにテキストファイルを保存する」とほぼ変わらない。
saveText() は以前定義したものをそのまま使えば良い。
isMountSDCard(), toSDCardAbsolutePath() も前回のものをそのまま使う。
(※) Android4.4(API 19)あたりから内部ストレージの仮想パスに変わった模様
また書き込みの場合は、マニフェストファイル(AndroidManifest.xml) に以下のパーミッションが必要になる。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
//設定値
private static final String DEFAULT_ENCORDING = "UTF-8"; //デフォルトのエンコード
//出力ストリームにてテキストを保存(汎用)
public static final void saveText(OutputStream outputStream, String text, String charsetName)
throws IOException, UnsupportedEncodingException {
BufferedOutputStream bos = null;
try {
bos = new BufferedOutputStream(outputStream);
bos.write(text.getBytes(charsetName)); //すべての byte[] を取得
bos.flush();
} finally {
try {
bos.close();
} catch (Exception e) {
//IOException
}
}
}
// SDCard のマウント状態をチェックする(Android 用)
public static final boolean isMountSDCard() {
final String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
return true; //マウントされている
} else {
return false; //マウントされていない
}
}
// SDCard のルートディレクトリを取得(Android 用)
public static final File getSDCardDir() {
return Environment.getExternalStorageDirectory();
}
// SDCard 内の絶対パスに変換(Android 用)
public static final String toSDCardAbsolutePath(String fileName) {
return getSDCardDir().getAbsolutePath() + File.separator + fileName;
}
//SDCard に、テキストファイルを保存する
//<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> が必要。
public static final void saveTextSDCard(String fileName, String text) throws IOException {
if (!isMountSDCard()) {
throw new IOException("No Mount");
}
OutputStream os = new FileOutputStream(toSDCardAbsolutePath(fileName));
saveText(os, text, DEFAULT_ENCORDING);
}
//メインでは... (※例外処理は省略)
String fileName = "sample.txt"; // "mnt/sdcard/sample.txt" or "sdcard/sample.txt" 等に保存される(端末による)
String text = "保存する文字列";
saveTextSDCard(fileName, text);
//ファイルが保存されていれば成功(エミュレータならDDMSで確認できる)
文字エンコーディングは読み込みに合わせて "UTF-8" にした方が良いだろう。他のものにしたいなら、ストリームに渡す前に変更してやれば良い。
実機での確認は、「マイファイル」のようなアプリで簡単に覗くことができる(アプリは端末による)。
前回流用の isMountSDCard() では、SDカードのマウント状態だけしかチェックしてないので、必要なら MOUNTED_READ_ONLY (読み取り専用) などもチェックした方が良いかも知れない。その辺は外部ストレージの状態を参考にして、色々付け加えると良いだろう。マウントはあくまで最低限の条件である。
テキストファイルの読み込みや保存をまとめたページは→こちら
(関連記事)
【Android】SDカードからテキストファイルを読み込む
【Android】エラーをSDカードに書き出す
【Android】SDカードから画像ファイルを読み込む
【Android】SDカードに画像ファイルを保存する(png)
【Android】SDカードに画像ファイルを保存する(jpg)
【Android】SDカードのファイルを削除する
【Android】内部ストレージにテキストファイルを保存する
【Android】【Applet】【Java】テキストファイルの読み込み・保存 まとめ
【Android】Preference 機能を使ってデータを読み込み・保存する
- 関連記事
トラックバック
トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/124-0eb1fa94
この記事にトラックバックする(FC2ブログユーザー)
| h o m e |