[PR] この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。

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

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

あなたは

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

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

 

 

 

 

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

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

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

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

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

ファイル名「main.xml」

01                        <?xml version="1.0" encoding="utf-8"?>
02<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03    android:layout_width="fill_parent"
04    android:layout_height="fill_parent"
05    android:orientation="vertical" >
06 
07    <TextView
08        android:id="@+id/TextView01"
09        android:textSize="12pt"
10        android:layout_width="fill_parent"
11        android:layout_height="wrap_content"
12         />
13    <EditText
14        android:id="@+id/EditText01"
15        android:textSize="12pt"
16        android:layout_width="fill_parent"
17        android:layout_height="wrap_content"
18        />
19    <Button
20        android:id="@+id/Read"
21        android:layout_width="fill_parent"
22        android:layout_height="wrap_content"
23        android:text="@string/Read"
24 
25        />
26    <Button
27        android:id="@+id/Save"
28        android:layout_width="fill_parent"
29        android:layout_height="wrap_content"
30        android:text="@string/Save"
31 
32        />
33    <Button
34        android:id="@+id/Del"
35        android:layout_width="fill_parent"
36        android:layout_height="wrap_content"
37        android:text="@string/Del"
38 
39        />
40 
41</LinearLayout>
42                        

ファイル名「strings.xml」

01                        <?xml version="1.0" encoding="utf-8"?>
02<resources>
03 
04    <string name="hello">Hello World, OutputText2Activity!</string>
05    <string name="Read">書き込み</string>
06    <string name="Save">読み込み</string>
07    <string name="Del">削除</string>
08    <string name="app_name">OutputText2</string>
09 
10</resources>
11                        
 

ファイル名「OutputText2Activity.java」

001package and.roid.outputtext;
002 
003import java.io.BufferedReader;
004import java.io.FileInputStream;
005import java.io.FileOutputStream;
006import java.io.IOException;
007import java.io.InputStreamReader;
008 
009import android.app.Activity;
010import android.graphics.PixelFormat;
011import android.os.Bundle;
012import android.text.Editable;
013import android.view.Display;
014import android.view.View;
015import android.view.Window;
016import android.view.WindowManager;
017import android.view.View.OnClickListener;
018import android.widget.Button;
019import android.widget.EditText;
020import android.widget.TextView;
021import android.widget.Toast;
022 
023public class OutputText2Activity extends Activity implements OnClickListener{
024    public float disp_w,disp_h;
025    private String text;//表示文字登録準備
026    static private final String FILE_PATH = "object.txt";//ファイルパス
027    private EditText edit1;//エディットボックス準備
028    private Button Read;//読み込みボタン準備
029    private Button Save;//書き込みボタン準備
030    private Button Del;//削除ボタン準備
031    private TextView textView;//テキストビュー準備
032 
033    @Override
034    public void onCreate(Bundle savedInstanceState) {
035        super.onCreate(savedInstanceState);
036        requestWindowFeature(Window.FEATURE_NO_TITLE);
037        getWindow().setFormat(PixelFormat.TRANSLUCENT);
038        Window window = getWindow();
039        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
040        WindowManager manager = window.getWindowManager();
041        Display disp = manager.getDefaultDisplay();
042        disp_w = disp.getWidth();
043        disp_h = disp.getHeight();
044 
045        setContentView(R.layout.main);
046 
047        textView = (TextView) findViewById(R.id.TextView01);//テキストビュー表示
048        edit1 = (EditText)this.findViewById(R.id.EditText01);//テキストボックス表示
049        Read = (Button)this.findViewById(R.id.Read);//読み込みボタン表示
050        Read.setOnClickListener(this);//読み込みボタンクリック時動作
051        Save = (Button)this.findViewById(R.id.Save);//書き込みボタン表示
052        Save.setOnClickListener(this);//書き込みボタンクリック時動作
053        Del = (Button)this.findViewById(R.id.Del);//削除ボタン表示
054        Del.setOnClickListener(this);//削除ボタンクリック時動作
055 
056    }
057 
058  //読み込みメソッド
059    public String readText() throws IOException{
060        /*
061         * 前回と変更なし
062         */
063        FileInputStream in = this.openFileInput(FILE_PATH);
064        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
065        StringBuffer sb = new StringBuffer();
066        String sbs;
067        while ((sbs = reader.readLine()) != null) {
068            sb.append(sbs);
069        }
070        in.close();
071        return sb.toString();
072        }
073 
074    //書き込みメソッド
075    public void saveText(String text) throws IOException {
076        /*
077         * FileOutputStreamの引数2番目をMODE_PRIVATEに変更
078         * 色々試した結果今回のMODE_PRIVATEは上書きぽいのかな
079         * 前回のは追記な感じ
080         * FileOutputStreamはActivityクラスでとその他のクラス
081         * での使用感がちょっと違い、引数も違ってくるのですね
082         * 前回はDRAWING_CACHE_QUALITY_AUTOだったし・・・
083         * 前回と同じ追記にするにはMODE_APPENDなのかな
084         * (MODE_APPENDで追記確認しました)
085         */
086        FileOutputStream output = this.openFileOutput(FILE_PATH,MODE_PRIVATE);
087        output.write(text.getBytes());
088        output.close();
089    }
090 
091    //削除メソッド
092    public void DelText() throws IOException{
093        /*
094         * 削除というよりも”なにもなし”を書き込む感じでうまくきました
095         */
096        FileOutputStream output = this.openFileOutput(FILE_PATH,MODE_PRIVATE);
097        output.write("".getBytes());
098        output.close();
099    }
100 
101    //クリック時動作
102    public void  onClick(View view){
103        //何をクリックしたかで分岐し最後にテキストビュー
104        //を表示更新
105        if(view == Read){
106            Editable et = edit1.getText();
107            text = et.toString();
108            try {
109                saveText(et.toString());
110            } catch (IOException e) {
111                e.printStackTrace();
112            }
113 
114            Toast toast = Toast.makeText(getApplicationContext(),
115                    "書き込みました:"+text, Toast.LENGTH_LONG);
116            toast.show();
117        }else if(view == Save){
118            try {
119                text = readText();
120            } catch (IOException e) {
121                e.printStackTrace();
122            }
123 
124            Toast toast = Toast.makeText(getApplicationContext(),
125                    "読み込みました:"+text, Toast.LENGTH_LONG);
126            toast.show();
127        }else if(view == Del){
128            try {
129                DelText();
130            } catch (IOException e) {
131                e.printStackTrace();
132            }
133 
134            Toast toast = Toast.makeText(getApplicationContext(),
135                    "削除しました:", Toast.LENGTH_LONG);
136            toast.show();
137        }
138        textView.setText(text);
139    }
140 
141}
142                        
実行結果

使用方法

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

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

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

 

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

 

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