Androidプログラミング日記 (仮)  

テキストファイル書き込みその2

あなたは

人目のプログラマーだよ。

Androidプログラミング日記 (仮).

 

 

 

 

テキストファイル書き込みその2

前回やった疑問を解決すべく作ってみました。書き込んだデータがちゃんと次回起動時まで保持されているか。です。

今まで作ってきたコードを使用してがんばってみました。

はたして無事成功するのか!

今回はmain.xmlとstrings.xmlも変更しました。

ファイル名「main.xml」

						<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/TextView01"
        android:textSize="12pt"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
         />
    <EditText
        android:id="@+id/EditText01"
        android:textSize="12pt"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
    <Button
        android:id="@+id/Read"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
		android:text="@string/Read"

        />
    <Button
        android:id="@+id/Save"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
		android:text="@string/Save"

        />
    <Button
        android:id="@+id/Del"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
		android:text="@string/Del"

        />

</LinearLayout>
						

ファイル名「strings.xml」

						<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="hello">Hello World, OutputText2Activity!</string>
    <string name="Read">書き込み</string>
    <string name="Save">読み込み</string>
    <string name="Del">削除</string>
    <string name="app_name">OutputText2</string>

</resources>
						
 

ファイル名「OutputText2Activity.java」

package and.roid.outputtext;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import android.app.Activity;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.text.Editable;
import android.view.Display;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class OutputText2Activity extends Activity implements OnClickListener{
	public float disp_w,disp_h;
	private String text;//表示文字登録準備
	static private final String FILE_PATH = "object.txt";//ファイルパス
	private EditText edit1;//エディットボックス準備
	private Button Read;//読み込みボタン準備
	private Button Save;//書き込みボタン準備
	private Button Del;//削除ボタン準備
	private TextView textView;//テキストビュー準備

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFormat(PixelFormat.TRANSLUCENT);
        Window window = getWindow();
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        WindowManager manager = window.getWindowManager();
        Display disp = manager.getDefaultDisplay();
        disp_w = disp.getWidth();
        disp_h = disp.getHeight();

        setContentView(R.layout.main);

        textView = (TextView) findViewById(R.id.TextView01);//テキストビュー表示
        edit1 = (EditText)this.findViewById(R.id.EditText01);//テキストボックス表示
        Read = (Button)this.findViewById(R.id.Read);//読み込みボタン表示
        Read.setOnClickListener(this);//読み込みボタンクリック時動作
        Save = (Button)this.findViewById(R.id.Save);//書き込みボタン表示
        Save.setOnClickListener(this);//書き込みボタンクリック時動作
        Del = (Button)this.findViewById(R.id.Del);//削除ボタン表示
        Del.setOnClickListener(this);//削除ボタンクリック時動作

    }

  //読み込みメソッド
	public String readText() throws IOException{
		/*
		 * 前回と変更なし
		 */
		FileInputStream in = this.openFileInput(FILE_PATH);
	    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
	    StringBuffer sb = new StringBuffer();
	    String sbs;
	    while ((sbs = reader.readLine()) != null) {
	        sb.append(sbs);
	    }
	    in.close();
		return sb.toString();
		}

	//書き込みメソッド
	public void saveText(String text) throws IOException {
		/*
		 * FileOutputStreamの引数2番目をMODE_PRIVATEに変更
		 * 色々試した結果今回のMODE_PRIVATEは上書きぽいのかな
		 * 前回のは追記な感じ
		 * FileOutputStreamはActivityクラスでとその他のクラス
		 * での使用感がちょっと違い、引数も違ってくるのですね
		 * 前回はDRAWING_CACHE_QUALITY_AUTOだったし・・・
		 * 前回と同じ追記にするにはMODE_APPENDなのかな
		 * (MODE_APPENDで追記確認しました)
		 */
		FileOutputStream output = this.openFileOutput(FILE_PATH,MODE_PRIVATE);
	    output.write(text.getBytes());
	    output.close();
	}

	//削除メソッド
	public void DelText() throws IOException{
		/*
		 * 削除というよりも”なにもなし”を書き込む感じでうまくきました
		 */
		FileOutputStream output = this.openFileOutput(FILE_PATH,MODE_PRIVATE);
	    output.write("".getBytes());
	    output.close();
	}

	//クリック時動作
	public void  onClick(View view){
		//何をクリックしたかで分岐し最後にテキストビュー
		//を表示更新
		if(view == Read){
			Editable et = edit1.getText();
			text = et.toString();
			try {
				saveText(et.toString());
			} catch (IOException e) {
				e.printStackTrace();
			}

			Toast toast = Toast.makeText(getApplicationContext(),
					"書き込みました:"+text, Toast.LENGTH_LONG);
			toast.show();
		}else if(view == Save){
			try {
				text = readText();
			} catch (IOException e) {
				e.printStackTrace();
			}

			Toast toast = Toast.makeText(getApplicationContext(),
					"読み込みました:"+text, Toast.LENGTH_LONG);
			toast.show();
		}else if(view == Del){
			try {
				DelText();
			} catch (IOException e) {
				e.printStackTrace();
			}

			Toast toast = Toast.makeText(getApplicationContext(),
					"削除しました:", Toast.LENGTH_LONG);
			toast.show();
		}
		textView.setText(text);
	}

}
						                      
実行結果

使用方法

テキストボックスに書き込んだら"書き込み"ボタンを押してセーブします。その時点でデータは保持されるので一度アプリを終了させてみます。もう一度アプリを立ち上げて、今度は"読み込み"ボタンを押してみましょう。前回保持されたデータが最上部に書き出されます。

これでアプリケーションのデータを保持する方法がわかりました。今回色々試した結果、データの書き込み方法に種類があるので、例えば書き込み時に","をテキストの最後に付け加えて追記書き込みにしてあげるとcsvファイルが出来上がり、データ管理などもできそうです。

さて、何をつくろうかな・・・それが一番の問題ですね・・

 

assetsフォルダに入れたtextファイルを読み込み表示
その1のコードを使用して連続したデータを取り込み分解
今までの読み込みこんだデータを図形に変換してみた!
アプリケーション専用ファイルでの書き込み読み込み
アプリケーション終了→次回起動時までデータの保持
 

 

Androidプログラミング日記 (仮) | サイトマップ | 個人情報保護方針 | 応援メールテヘペロ | ©2012 Japan  相互リンク大募集中です