前面我簡單地介紹了2種資料儲存的方式,例如:在【安卓進化十三】中介紹了Shared Preferences,在【安卓進化十四】中我寫了個sqlite的資料庫儲存資料的通訊錄的例子,下面我介紹一下File儲存資料的形式,File形式我講兩點,一個是檔案是不能在不同的程式間共用的。另一個特點是用openFileOutput方法開啟一個檔案(如果這個檔案不存在就建立這個檔案),openFileOutput往檔案裡儲存東西的方法。我寫了個例子:點擊button,寫個int類型的數(count)在file中,然後除以2取餘數,餘數為0則狀態為關,餘數為1則狀態為開。這個count值一直++。這是個簡單的例子,為了說明file儲存資料的效果。轉載請標明出處:http://blog.csdn.net/wdaming1986/article/details/6849703
請看: 點擊button按鈕 再次點擊button按鈕
這是dmfile.cfg檔案中的內容:mButton一直++,為奇數時mChange=false,為偶數時true。
代碼奉上:在這個FileStorage工程裡面:
在com.cn.daming包裡:FileStorageMainActivity.java類中的內容:
<span style="font-size:13px;color:#000000;">package com.cn.daming;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class FileStorageMainActivity extends Activity {
private TextView mTextView;
private Button cButton;
private boolean mChanged = false;
public int mCount = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView = (TextView)findViewById(R.id.show_textview);
cButton = (Button)findViewById(R.id.button);
//read the mChanged is true or false
readLoadFile();
refreTextView();
initButton();
}
private void initButton()
{
cButton.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
readLoadFile();
if(mCount%2==0)
{
mChanged = false;
refreTextView();
}
if(mCount%2==1)
{
mChanged = true;
refreTextView();
}
mCount++;
saveFileStorage();
}
});
}
public void refreTextView()
{
if(mChanged)
{
mTextView.setText("目前狀態為:開!");
}
else
{
mTextView.setText("目前狀態為:關!");
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK)
{
//save the fileStorage before the programe back
saveFileStorage();
if(mChanged)
{
Toast.makeText(this, "程式退出狀態為開!", Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(this, "程式退出狀態為關!", Toast.LENGTH_LONG).show();
}
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
private void readLoadFile()
{
//make the Properties
Properties properties = new Properties();
try{
FileInputStream istream = this.openFileInput("dmfile.cfg");
properties.load(istream);
}
catch(FileNotFoundException e){
return;
}
catch(IOException e){
return;
}
mChanged = Boolean.valueOf(properties.getProperty("mChanging").toString());
mCount = Integer.valueOf(properties.getProperty("mButton").toString());
}
private boolean saveFileStorage()
{
Properties properties = new Properties();
properties.put("mChanging", String.valueOf(mChanged));
properties.put("mButton", String.valueOf(mCount));
try{
FileOutputStream ostream = this.openFileOutput("dmfile.cfg", Context.MODE_WORLD_WRITEABLE);
properties.store(ostream, "");
}
catch(FileNotFoundException e)
{
return false;
}
catch(IOException e)
{
return false;
}
return true;
}
}</span>
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:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:gravity="center_vertical|center_horizontal"
android:layout_marginBottom="15dip"
android:layout_marginTop="15dip"
/>
<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="測試改變File content"
android:layout_marginBottom="10dip"
/>
<TextView
android:id="@+id/show_textview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
/>
</LinearLayout>