データディレクトリにファイルを保存
Saving Files to the Data Directory
もし保持したいデータがキー/値のペアでうまく表現されてなかったら、
そして、ファイルとしてファイルシステムにそのディレクトリを
保存をするプリミティブメソッドを使いたいかもしれません。
このオプションは長い文字列のテキストやバイナリデータの保存に
役立ちます。
保存していくファイルを作るためには、openFileOutput()メソッドを
使うことができ、ファイル名やファイルを開くときのモードを指定したり
できます。
このメソッドはFileOutputStreamオブジェクトを返してきます。
package net.learn2develop.files;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//---writing to files---
try{
FileOutputStream fOut = openFileOutput(
textfile.txt", MODE_PRIVATE);
}catch (IOException ioe){
ioe.printStackTrace();
}
}
}
バイトラインをファイルに書くためには、OutputStreamWriterクラスを
使い、write()メソッドを使い文字列をファイルに書き込みます。
変更をファイルに保存するには、close()メソッドを使います。
package net.learn2develop.files;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//---writing to files---
try{
FileOutputStream fOut = openFileOutput("textfile.txt", MODE_PRIVATE);
OutputStreamWriter osw = new OutputStreamWriter(fOut);
//---write the string to the file---
osw.write("書き込みたい文字列を入れます");
osw.close();
//---display file saved message---
Toast.makeText(getBaseContext(), "File saved successfully",
Toast.LENGTH_SHORT).show();
}catch(IOException ioe){
ioe.printStackTrace();
}
}
}
ファイルが作られたときに、
そのファイルは/data/data/<パッケージ名>/filesフォルダに
保存されていきます。
ちょっと注釈
filesフォルダに保存されているファイルは永続的です。
これらのファイルは、明らかに削除しない限り残ります。
同じように、openFileInput()メソッドをファイルを読み込み用として
開くのに使います。このopenFileInput()メソッドは
FileInputStreamオブジェクトを返し、このオブジェクトを
読み込み用にInputStreamReaderオブジェクトに渡すことができます。
package net.learn2develop.files;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//---writing to files---
try{
FileOutputStream fOut = openFileOutput("textfile.txt", MODE_PRIVATE);
OutputStreamWriter osw = new OutputStreamWriter(fOut);
//---write the string to the file---
osw.write("書き込みたい文字列を入力します");
osw.close();
//---display file saved message---
Toast.makeText(getBaseContext(), "File saved successfully",
Toast.LENGTH_SHORT).show();
}catch(IOException ioe){
ioe.printStackTrace();
}
//---reading from files---
try{
FileInputStream fIn = openFileInput("textfile.txt");
InputStreamReader isr = new InputStreamReader(fIn);
}catch (IOException ioe){
ioe.printStackTrace();
}
}
}
ファイルから読み込まれる文字がどのくらいあるかを知る必要がないのは、
InputStreamReaderオブジェクトからread()メソッドを使い、
100バイトのブロックで文字を読み込むためです。
この100バイトという量は開発者に意味のある値に変更可能です。
このread()メソッドは読み込まれた文字数を返し、
文字が読み込まれなくなるまで読み込みを続けます。
読み込み終了は、”-1”がファイルの最後にあるためわかります。
この例では、100バイトのブロックでファイルから読み込みました。
これを1000バイトにしたらどうなるのか?
また、50バイトに減らしたら?
どちらも間違いなく動作しますが、ブロックのサイズは
ファイルのサイズで大まかに決定します。
もし大きなファイルをいつも使うようなら、ループを使って
繰り返しごとに、バイト量を追加するようにして全体の読み込み
バイト量を大きくするのもいいかもしれません。
ほかの方法としては、バッファ用にメモリの予約ができてから
大きなブロックサイズでさらにメモリも取れます。
一般的には、ブロックサイズを8Kバイト位に上げるのが妥当です。
package net.learn2develop.files;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity{
static final int READ_BLOCK_SIZE = 100;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activiy_main);
//---writing to files---
try{
FileOutputStream fOut = openFileOutput("textfile.txt", MODE_PRIVATE);
OutputStreamWriter osw = new OutputStreamWriter(fOut);
//---write the string to the file---
osw.write("書き込みたい文字列を入れます。");
osw.close();
//---display fole saved message---
Toast.makeText(getBaseContext(), "File saved successfully",
Toast.LENGTH_SHORT).show();
}catch(IOException ioe){
ioe.printStackTrace();
}
//---reading from files---
try{
FileInputStream fIn = openFileInput("textfile.txt");
InputStreamReader isr = new InputStreamReader(fIn);
char[] inputBuffer = new char[READ_BLOCK_SIZE];
String s = "";
int charRead;
while ((charRead = isr.read(inputBuffer)) > 0){
//---convert the chars to a String---
String readString = String.copyValue Of(inputBuffer, 0, charRead);
s += readString;
inputBuffer = new char[READ_BLOCK_SIZE];
}
isr.close();
Toase.makeText(getBaseContext(), "File loaded successfully" + s,
Toast.LENGTH_SHORT).show();
}catch(IOException ioe){
ioe.printStackTrace();
}
}
}
ちょっと注釈
/data/data/<パッケージ名>フォルダは、ユーザが
アプリケーションをアンインストールすればフォルダ全体が削除されます。
|
【用語解説】
XML
HTMLと同じような言語ですが、
すべての型の複雑なデータ構造を
送信するための設計ができる
ファイル型式。
オブジェクト
ある手続きを持った
データアイテムで、
他の手続きと関連づけされるもの
metaタグ
ウェブページに与える
情報の宣言につかわれ
検索エンジン・ウェブアプリ
などにウェブページの内容を
伝える役目をする。
metaタグの内容は
ページ内に表示されない。
コンストラクタ
オブジェクト指向
プログラミングで使われ
新しいオブジェクトが
作られ時に呼び出される
メソッドのこと。
クラス
オブジェクト指向
プログラミングでの
オブジェクトの型
オブジェクト指向プログラミング
プログラミングの
方式のことで、
プログラマはデータ型を
定義できるだけでなく
自動的にデータ型と
メソッドを関連付け
できる
アクティビティ
Androidにおける
アクティビティは
Androidアプリの画面に
相当するもの
ボタンやウェブページ
など表示されている
すべてのもののこと。
view
Androidのアプリを開発する
上で使う部品のことで、
トリガボタン・イメージボタン
チェックボックスなどのこと。
UI
ユーザインターフェースのこと。
Bind(バインド)
シンボルとデータを
関連させるため
または、データの一片と
他のものを関連させること。
以下は例。
・変数に値を入れる。
(変数の初期化)
・特定のEthernetポートと
ネットワークプロトコルを
関連付けする。
・Javaの変数のセット上に
XML文書を配置すること。
または、ほかの
プログラミング言語でも。
|