Android數據存儲之間Files

Android系統本身借用了JAVA裏面的讀寫文件的機制。本文的這個例子就是利用文件的寫讀對數據進行存儲,即當界面的輸入文本框改變時,程序將改變的值寫入文件中。當程序再運行時則從文件中讀取先前保存的值,將文本框填充。

程序的界面同mySharedPreferences例子一樣。下面只貼出幾個文件的內容:

 

AndroidManifest.xml文件內容如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.demo.myFileIo"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".myFileIo"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>


</manifest> 


 

main.xml文件內容如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    
	<TextView android:text="請輸入用戶名:" 
	android:id="@+id/TextView01" 
	android:layout_width="wrap_content" 
	android:layout_height="wrap_content">
	</TextView>
	
	<EditText android:layout_height="wrap_content" 
	android:layout_width="fill_parent" 
	android:text="@+id/EditText01" 
	android:id="@+id/EditText01">
	</EditText>
	
	<TextView android:text="請輸入密碼:" 
	android:id="@+id/TextView02" 
	android:layout_width="wrap_content" 
	android:layout_height="wrap_content">
	</TextView>
	
	<EditText android:layout_height="wrap_content" 
	android:layout_width="fill_parent" 
	android:text="@+id/EditText02" 
	android:id="@+id/EditText02">
	</EditText>



</LinearLayout>


myFileIo.java文件內容如下:

 

package com.demo.myFileIo;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.KeyEvent;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;

public class myFileIo extends Activity {
	//定義各個元素對象
	EditText username;
	EditText password;
	//定義一個要寫入的文件的路徑
	String path;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //元素綁定
        username = (EditText)findViewById(R.id.EditText01);
        password = (EditText)findViewById(R.id.EditText02);
        
        File sdDir = Environment.getExternalStorageDirectory();
        //得到Sdcard的路徑 
        path = sdDir.getAbsolutePath();
        //得到保存的用戶名,如果沒有值則設置爲空
        username.setText(getUserName());
        password.setText("");
        
        //監聽文本框改變,然後保存新的用戶名
        username.setOnEditorActionListener(new OnEditorActionListener()
        {

			public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
				// TODO Auto-generated method stub
				//保存現在的用戶名,下次使用時可讀取
				saveUserName(username.getText().toString());
				username.setText(username.getText().toString());
				return false;
			}
        	
        });
    }
    
    private String getUserName()
    {
    	String username = "";
    	//新創建一個文件
    	File file1 = new File(path,"/setting.txt");
    	//如果在SD卡中存此文件,則顯示此文本,否則創建文件
    	if(!file1.exists())
    	{
    		//返回空字符串
    		username = "";
    	}
    	else
    	{
    		//讀入TXT文本資源,創建輸入流。
    		File file = new File(path,"/setting.txt");
    		InputStream is = null;
    		try
    		{
    			is = new FileInputStream(file);
    		}
    		catch(FileNotFoundException el)
    		{
    			el.printStackTrace();
    		}
    		//創建字符存放緩存
    		byte[] buffer = new byte[1024];
    		int rd = 0;
    		//新建輸出流
    		ByteArrayOutputStream baops = new ByteArrayOutputStream();
    		//讀取文本文件到緩存中
    		try
    		{
    			while((rd = is.read(buffer)) != -1)
    			{
    				baops.write(buffer,0,rd);
    			}
    			//進行中文編碼轉換
    			String temp = new String(baops.toByteArray(),"GB2312");
    			//關閉輸出流
    			baops.close();
    			//將文件內容輸出
    			username = temp;
    		}
    		catch(IOException e)
    		{
    			e.printStackTrace();
    		}
    	}
    	
		return username;
    }
    
    private void saveUserName(String username)
    {
    	//新建一個文件
    	//得到文件資源作爲讀寫流
    	byte str[] = username.getBytes();
    	FileOutputStream out;
    	try
    	{
    		//創建文件
    		File file = new File(path+"/setting.txt");
    		file.createNewFile();
    		//打開文件file的OutputStream
    		out = new FileOutputStream(file);
    		//將字符串轉換成byte數組寫入文件
    		out.write(str);
    		//關閉文件file的OutputStream
    		out.close();
    	}catch(IOException e)
    	{
    		e.printStackTrace();
    	}
    }
}


得到的程序界面如mySharedPreferences例子的界面,在此不再上傳圖片。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章