【Android】【Java】内部ストレージからテキストファイルを読み込む 
2014/06/20 Fri [edit]
Android には「内部ストレージ」というアプリケーションごとにデータを保存できる場所がある。そのファイルは、端末の「/data/data/[パッケージ名]/files/」に置かれる。Eclipse を使っているのなら、「DDMS」に切り替えれば見れるだろう(エミュレータを起動している時のみ)。与えるパーミッションによっては他のアプリからも読めるが、通常はセキュリティを考えて、各アプリ固有のファイルに設定する。アプリケーション間でデータを共有したい場合は、ContentProvider の機能を使う。
Context クラスの getDir() など、Android 専用のメソッドで、配下にフォルダなども作れるが、「/data/data/[パッケージ名]/app_[フォルダ名]/」のように一定形式で作られるので、それに準拠してないと上手く読めない恐れがある。大量のファイルを管理するのには向いてないかも知れない。とりあえず、そのアプリ固有のデフォルトの保存場所での使い方。
ストリームからのテキストファイル読み込みは例によって以前作ったものをそのまま使う。
loadText() - ストリームからテキストファイルを読み込む
手順を簡単に説明すると、次のようになる。
1.内部ストレージ(ローカルストレージ)の入力ストリームを開く。
2.ストリームからテキストエンコーディングして文字列を返す。
●内部ストレージの入力ストリームを開く部分 [Android 用]
//設定値
private static final String DEFAULT_ENCORDING = "UTF-8"; //デフォルトのエンコード
//内部ストレージから、テキストファイルを読み込む(Android 用)
public static final String loadTextLocalStorage(String fileName, Context context)
throws IOException, FileNotFoundException {
InputStream is = context.openFileInput(fileName); // "data/data/[パッケージ名]/files/" 直下
return loadText(is, DEFAULT_ENCORDING);
}
//メインでは... (※例外処理は省略)
String fileName = "sample.txt"; // "data/data/[パッケージ名]/files/sample.txt" になる
String text = loadTextLocalStorage(fileName, this); //this は起動した Activity が良い(Context)
System.out.println(text); //Log.d("tag", text); でも良い
DDMS で覗いて、保存フォルダが作られていれば、右上の方にある [push] ボタンからファイル転送もできるが、無い場合は、Context クラスの openFileOutput() で書き込めばフォルダが自動的に作られる。
●ストリームからテキストエンコーディングして読み込む部分 [汎用](- loadText() ※以前作ったものを使い回し)
//設定値
private static final int DEFAULT_READ_LENGTH = 8192; //一度に読み込むバッファサイズ
//ストリームから読み込み、バイト配列で返す
public static final byte[] readStream(InputStream inputStream, int readLength) throws IOException {
final ByteArrayOutputStream byteStream = new ByteArrayOutputStream(readLength); //一時バッファのように使う
final byte[] bytes = new byte[readLength]; //read() 毎に読み込むバッファ
final BufferedInputStream bis = new BufferedInputStream(inputStream, readLength);
try {
int len = 0;
while ((len = bis.read(bytes, 0, readLength)) > 0) {
byteStream.write(bytes, 0, len); //ストリームバッファに溜め込む
}
return byteStream.toByteArray(); //byte[] に変換
} finally {
try {
byteStream.reset(); //すべてのデータを破棄
bis.close(); //ストリームを閉じる
} catch (Exception e) {
//IOException
}
}
}
//ストリームから読み込み、テキストエンコードして返す
public static final String loadText(InputStream inputStream, String charsetName)
throws IOException, UnsupportedEncodingException {
return new String(readStream(inputStream, DEFAULT_READ_LENGTH), charsetName);
}
ついでなので、次回は内部ストレージにテキストファイルを保存してみよう。
テキストファイルの読み込みや保存をまとめたページは→こちら
(関連記事)
【Android】内部ストレージにテキストファイルを保存する
【Android】内部ストレージから画像ファイルを読み込む
【Android】res/raw リソースフォルダからテキストファイルを読み込む
【Android】assets フォルダからテキストファイルを読み込む
【Android】SDカードからテキストファイルを読み込む
【汎用】ストリームからテキストファイルを読み込む(ストリームから読み込み、テキストエンコードして返す)
【汎用】ローカルシステム(Windows 等)から、テキストファイルを読み込む
【Applet/汎用】URL経由でWebサーバ上のテキストファイルを読み込む
【Applet】jar 内リソースからテキストファイルを読み込む
【Android】【Applet】【Java】テキストファイルの読み込み・保存 まとめ
【Android】Preference 機能を使ってデータを読み込み・保存する
- 関連記事
トラックバック
トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/121-8880dc01
この記事にトラックバックする(FC2ブログユーザー)
| h o m e |