Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android學習筆記---android數據存儲與訪問

Android學習筆記---android數據存儲與訪問

編輯:關於Android編程

數據存儲與訪問 --------------------------------------- 一個在手機和sd卡上存儲文件的例子 1.a.文件名稱:lable   b.一個text框   c.文件內容:label   d.一個text框   e.保存:button ----------------------------- /File/res/layout package com.credream.file;     import com.credream.service.FileService;     import android.app.Activity;   import android.os.Bundle;   import android.view.View;   import android.view.View.OnClickListener;   import android.widget.Button;   import android.widget.EditText;   import android.widget.Toast;   import android.widget.SimpleAdapter.ViewBinder;     public class FileActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) this.findViewById(R.id.button);   button.setOnClickListener(new ButtonClickListener());   }   private final class ButtonClickListener implements View.OnClickListener {     @Override public void onClick(View v) { EditText    filenameText = (EditText) findViewById(R.id.filename); EditText    contentText = (EditText) findViewById(R.id.filecontent);   String filename = filenameText.getText().toString(); String content = contentText.getText().toString();   FileService service = new FileService(getApplicationContext());   // 這裡也可以傳FileActivity,因為FileActivity類,也是繼承自   // Context   try { service.save(filename, content);   Toast.makeText(getApplicationContext(), R.string.success, 1) .show();   } catch (Exception e) { Toast.makeText(getApplicationContext(), R.string.fail, 1) .show   (); e.printStackTrace(); }   }   } } ----------------------------------------- /File/src/com/credream/service/FileService.java package com.credream.service;   import java.io.FileOutputStream;   import android.content.Context;   public class FileService { /**  *保存文件  * @param filename 文件名稱  * @param content  文件內容  */ private Context context; public FileService(Context context) { this.context = context; } public void save(String filename, String content) throws Exception {  //IO j2ee FileOutputStream outStream=context.openFileOutput   (filename,Context.MODE_PRIVATE); //mode:以覆蓋形式和追加形式兩種        //context.openFileOutput(filename,mode) //Context.MODE_PRIVATE私有操作模式 創建出來的文件只能被本應用訪問   ;其他應用無法訪問該文件 //另外采用私有操作模式創建的文件,寫入文件中的內容覆蓋源文件的內容 outStream.write(content.getBytes());//content.getBytes()這個方法   調用系統的 //Returns a new byte array containing the characters of this    string encoded using the system's default charset.          //默認是用utf-8 //The behavior when this string cannot be represented in the    system's default charset is unspecified. In practice, when the default charset is    UTF-8 (as it is on Android), all strings can be encoded.          //沒有默認編碼的時候,會用iso8859-1來編碼 } } ---------------------------------------------------------------- openFileOutput()方法的第一參數用於指定文件名稱,不能包含路徑分隔符“/” ,如果文   件不存在,Android 會自動創建它。創建的文件保存在/data/data/<package name>/files目   錄,如: /data/data/cn.itcast.action/files/itcast.txt ,通過點擊Eclipse菜   單“Window”-“Show View”-“Other”,在對話窗口中展開android文件夾,選擇下面的   File Explorer視圖,然後在File Explorer視圖中展開/data/data/<package name>/files目   錄就可以看到該文件。 openFileOutput()方法的第二參數用於指定操作模式,有四種模式,分別為:    Context.MODE_PRIVATE    =  0 Context.MODE_APPEND    =  32768 Context.MODE_WORLD_READABLE =  1 Context.MODE_WORLD_WRITEABLE =  2 Context.MODE_PRIVATE:為默認操作模式,代表該文件是私有數據,只能被應用本身訪問,   在該模式下,寫入的內容會覆蓋原文件的內容,如果想把新寫入的內容追加到原文件中。可   以使用Context.MODE_APPEND Context.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內容,否則就創建新文   件。 Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應用是否有權   限讀寫該文件。 MODE_WORLD_READABLE:表示當前文件可以被其他應用讀取;MODE_WORLD_WRITEABLE:表示當   前文件可以被其他應用寫入。 如果希望文件被其他應用讀和寫,可以傳入:  openFileOutput("itcast.txt", Context.MODE_WORLD_READABLE +    Context.MODE_WORLD_WRITEABLE); ------------------------------------------------------------------- android有一套自己的安全模型,當應用程序(.apk)在安裝時系統就會分配給他一個userid,   當該應用要去訪問其他資源比如文件的時候,就需要userid匹配。默認情況下,任何應用創   建的文件,sharedpreferences,數據庫都應該是私有的(位於/data/data/<package    name>/files),其他程序無法訪問。除非在創建時指定了Context.MODE_WORLD_READABLE或   者Context.MODE_WORLD_WRITEABLE ,只有這樣其他程序才能正確訪問。 ---------------------------------------------------------------------- 1.數據的讀取:   用數據的輸入流 ---------------------- 在FileService.java中添加讀取內容的方法 /**  * 文件讀取內容  * @param filename 文件名  * @return  * @throws Exception  */ public String read(String filename) throws Exception{ FileInputStream inputStream=context.openFileInput(filename); ByteArrayOutputStream  outputStream=new ByteArrayOutputStream(); //這個方法會在/data/data/<package name>/files目錄下查找這個文件 //如果找到了就返回一個輸入流 byte[] buffer=new byte[1024]; //inputStream.read(buffer);//讀滿這個數組後返回 //只要數據沒有讀完,需要一直調用這個方法 //這個方法的返回值為-1的時候,是讀完了,不是-1的時候返回的是 //讀取的大小字節 int len=0;  while ((len=inputStream.read(buffer))!=-1){ outputStream.write(buffer,0,len);  //把讀取的數據放到內存中  }  byte[] data=outputStream.toByteArray();  return new String(data); }   --------------------------------------------------------------- 編寫測試類:readTest.java package com.credream.file;   import com.credream.service.FileService;   import android.test.AndroidTestCase; import android.util.Log;   public class readTest extends AndroidTestCase { private static final String TAG="FileServiceTest"; public void testRead()throws Exception{ FileService service=new FileService(this.getContext()); String result=service.read("lidewei.txt"); Log.i(TAG, result); } } ------------------------------------------------------------- AndroidManifest.xml 清單文件中添加測試junit支持包 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="com.credream.file"     android:versionCode="1"     android:versionName="1.0" >       <uses-sdk android:minSdkVersion="8" />       <application         android:icon="@drawable/ic_launcher"         android:label="@string/app_name" >         <activity             android:label="@string/app_name"             android:name=".FileActivity" >             <intent-filter >                 <action android:name="android.intent.action.MAIN" />                   <category android:name="android.intent.category.LAUNCHER" />             </intent-filter>         </activity>      <uses-library android:name="android.test.runner" />         </application>          <instrumentation         android:name="android.test.InstrumentationTestRunner"         android:targetPackage="com.credream.file" /> </manifest> --------------------------------------------------------------- 右鍵測試,並用過濾器查看:03-05 00:31:17.771: I/FileServiceTest(7453): 
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved