Android中的資料存取和IO (第一篇)

來源:互聯網
上載者:User

應用程式都會涉及到資料的輸入、輸出,android應用也不例外。Android中應用程式儲存資料通常有兩種模式:1,資料量少,格式簡單(例如,字串、標量),使用普通文本就好,可以使用Android系統提供的SharedPreferences儲存;2、需要大量的資料存放區訪問,可以藉助資料庫,android系統提供了內建SQLite資料庫,而且為訪問資料庫提供了方便的API。本片文章將會詳細講述如何在Android中使用資料庫。

1、使用SharedPreferences訪問key-value對和使用Editor寫入資料

在一些小應用中,比如遊戲的玩家積分(飛機大戰之類的)、應用程式的配置資訊(是否開啟音效、震動等),使用SharedPreferences儲存,這個方法儲存的資料主要是簡單類型的key-value對。

SharedPreferences提供的成員函數主要有三個:

》boolean contians(String key)

》abstract Map getAll(); 擷取SP資料裡面的全部資料

》boolean getXxx(String key,xxx defVlaue) :擷取key的值。

SharedPreferences並沒有寫入資料的能力,需要調用edit()方法來擷取對應的Editor()。

》SharedPreferences.Editor clear() :清空SharedPreferences裡面所有的額資料

》SharedPreferences.Editor putXxx(String key, xxx value):向SharedPreferences存入key值

》boolean 層哦秘密他() :當完成editot編譯,提交改方法,通常寫在末尾。

SharedPreferences是一個介面,程式無法直接建立SharedPreferences執行個體,需要通過Context提供getSharedPreferences(Stirng name,int mode)來建立執行個體。

第二個參數如下:

》Context.MODE_PRIVATE :指定改資料只能被本程式讀寫

》Context.MODE_WORLD_READABLE:可以被其他程式讀,但不能寫

》Context.MODE_WORLD_WRITEABLE:課被其他讀寫。

常式如下:提供兩個按鈕,一個寫入資料,另一個讀取寫入的資料。

1、activity下的.java檔案如下:

package org.crazyit.io;import java.text.SimpleDateFormat;import java.util.Date;import android.app.Activity;import android.content.SharedPreferences;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;/** * Description: * 
site: crazyit.org *
Copyright (C), 2001-2012, Yeeku.H.Lee *
This program is protected by copyright laws. *
Program Name: *
Date: * @author Yeeku.H.Lee kongyeeku@163.com * @version 1.0 */public class SharedPreferencesTest extends Activity{SharedPreferences preferences;SharedPreferences.Editor editor;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);// 建立SharedPreferences執行個體,名字、可讀preferences = getSharedPreferences("crazyit", MODE_WORLD_READABLE);editor = preferences.edit();Button read = (Button) findViewById(R.id.read);Button write = (Button) findViewById(R.id.write);read.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View arg0){//擷取time的字串String time = preferences.getString("time", null);//讀取int的隨機數int randNum = preferences.getInt("random", 0);String result = time == null ? //?判斷"您暫時還未寫入資料": "寫入時間:" + time + "\n上次隨機產生的隨機數為:" + randNum;//toast提示Toast.makeText(SharedPreferencesTest.this , result , Toast.LENGTH_LONG).show();}});write.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View arg0){SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 "+ "hh:mm:ss");// 存入目前時間editor.putString("time", sdf.format(new Date()));// 存入隨機數editor.putInt("random", (int) (Math.random() * 100));// 提交資料editor.commit();}});}}

2、res下面的布局檔案:



3、AVD調試結果如下:

開啟DDMS調試可以知道,sharedpreferences資料總是儲存在/data/data//shared_prefs目錄下面以.xml形式儲存。

2、File儲存

Java提供了一套完整的IO流體系,包括FileInPutSream、FileOutPutStream,通過這些IO流來訪問磁碟檔案,android同樣支援以這種方式來訪問手機儲存空間的檔案。

Context提供了兩種方法來開啟檔案應用程式下的資料檔案IO流:

》 public FileInputStream openFileInput (String name) :開啟輸入資料流檔案name

》 public FileOutputStream openFileOutput (String name, int mode) :開啟輸出資料流檔案name

這裡解釋一下輸入資料流和輸出資料流:輸入資料流指的是從硬碟等儲存空間中讀資料到記憶體中,軟體在記憶體中運行;輸出資料流指的是從記憶體中讀資料到外部儲存空間中。

mode參數主要有:

》MODE_PRIVATE :指定改資料只能被本程式讀寫

》MODE_APPEND :以追加方式開啟,可向該檔案夾中追加內容

》MODE_WORLD_READABLE:可以被其他程式讀,但不能寫

》MODE_WORLD_WRITEABLE:可被其他讀寫。

除此之外,Context還提供了如下方法來訪問應用程式的檔案夾。 》getDir(String name, int mode) : 在應用程式的資料檔案下擷取或建立name對於的子檔案夾 》File getFileDir() :擷取應用程式的資料檔案的絕對路徑 》String fileList() :返迴文件檔案夾list 》deleteFile(String name) :刪除name檔案 下面根據常式來分析:兩個文字框,兩個按鈕,第一組用於寫入檔案名稱字和存入;第二組用於讀取檔案,並顯示。

1、activity下的.java

package wqt.list.filereadwrite;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.PrintStream;import android.os.Bundle;import android.app.Activity;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class MainActivity extends Activity {final String File_name="Read_Write";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button read=(Button)findViewById(R.id.read);Button write=(Button)findViewById(R.id.write);final EditText edit1=(EditText) findViewById(R.id.edit1);final EditText edit2=(EditText) findViewById(R.id.edit2);write.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//將wdit1中的內容寫入到檔案中write(edit1.getText().toString());  //write函數在下面需要定義edit1.setText("");}});read.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubedit2.setText(read());         //read函數需要在下面定義}});}private String read(){try{//開啟檔案輸入資料流FileInputStream fis =openFileInput(File_name );byte[] buff = new byte[1024];int hadRead =0;StringBuilder sb = new StringBuilder("");while( (hadRead = fis.read(buff)) > 0){sb.append(new String(buff,0,hadRead));}    return sb.toString();}catch(Exception e){e.printStackTrace();}return null;}private void write(String content){try{//使用追加模式開啟檔案輸出資料流FileOutputStream fos = openFileOutput(File_name, MODE_APPEND);PrintStream ps=new PrintStream(fos);ps.println(content);ps.close();}catch(Exception e){e.printStackTrace();}}}
2.res下的layout檔案.xml
                

3、AVD調試:



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.