Android開發教學
Android 開發環境配置
Android 架構
Android 應用組件
Android Hello World示例
Android 資源組織和訪問
Android Activity
Android Service
Android廣播接收器
Android內容提供者
Android碎片/片段
Android Intent過濾器
Android UI佈局
Android LinearLayout
Android RelativeLayout
Android TableLayout
Android AbsoluteLayout
Android FrameLayout
Android ListView
Android GridView
Android UI控件
Android TextView
Android EditText
Android AutoCompleteTextView
Android Button
Android ImageButton
Android CheckBox
Android ToggleButton
Android RadioButton
Android RadioGroup
Android事件處理
Android樣式和主題
Android樣式示例
Android主題示例
Android自定義組件
Android拖放
Android通知
Android基於位置服務
Android發送電子郵件
Android發送短信/SMS
Android撥打電話
發佈Android應用
ArrayAdapter
SimpleCursorAdapter
Android ProgressDialog
Android Spinner
使用活動代碼自定義Android組件
使用佈局文件自定義Android組件
Android自定義組件及屬性
Android Alertdialog(警告對話框)
Android Animation(動畫)實例
Android音頻捕獲(錄音)
Android音頻管理器實例
Android AutoCompleteTextView(自動完成)實例
Android最佳實踐
Android Bluetooth(藍牙)實例
Android Camera(攝像頭)
Android Clipboard(複製/剪貼板)
Android自定義字體
Android數據備份
Android Gestures/手勢
Android圖片效果
Android圖片切換
Android內部存儲
Android JetPlayer實例
Android JSON解析器
Android加載Spinner
Android本地化
Android登錄實例
Android MediaPlayer(多媒體播放)

Android內部存儲

Android提供多種存儲的應用程序存儲自己的數據。存儲的地點是共享的,內部和外部存儲,SQLite存儲,並通過網絡連接存儲。

在本章中,我們要看看在內部存儲。內部存儲是設備存儲器上的專用數據的存儲。

默認情況下,這些文件是私有並由唯一應用程序訪問和刪除,當用戶刪除應用程序。

寫入文件

爲了使用內部存儲寫入某些數據到文件中,調用openFileOutput()方法用的文件和模式的名稱。該模式可以是 private , public,它的語法如下:

FileOutputStream fOut = openFileOutput("file name here",MODE_WORLD_READABLE);

該方法openFileOutput()返回FileOutputStream的一個實例。因此收到FileInputStream對象。之後可以調用write方法寫入文件數據。它的語法如下:

String str = "data"; fOut.write(str.getBytes()); fOut.close();

讀取文件

爲了從剛纔創建的文件中讀取數據,openFileOutput()方法使用文件的名稱。它返回FileInputStream的一個實例。它的語法如下:

FileInputStream fin = openFileInput(file);

在此之後,可以調用read方法來一次從文件讀取一個字符,然後打印出來。它的語法如下:

int c; String temp=""; while( (c = fin.read()) != -1){ temp = temp + Character.toString((char)c); } //string temp contains all the data of the file. fin.close();

除了寫入(write)和關閉(close)方法,對於更好寫入文件所提供FileOutputStream類的其他方法。這些方法如下: 

Sr.No

方法及說明

1

FileOutputStream(File file, boolean append)
這個方法構造一個新的FileOutputStream寫入到文件。

2

getChannel()
此方法返回分享與當前流的位置上只寫FileChannel

3

getFD()
這個方法返回底層文件描述符

4

write(byte[] buffer, int byteOffset, int byteCount)
這個方法從字節數組緩衝區寫入字節計數開始位置偏移此流

除了用於良好的讀取文件所提供的FileInputStreamclass讀取和關閉,還有其它方法的方法。這些方法如下:

Sr.No

方法及說明

1

available()
此方法返回可以讀取或跳過沒有阻止更多的輸入字節的估計數目

2

getChannel()
此方法返回分享與當前流的位置只讀FileChannel

3

getFD()
這個方法返回底層文件描述符

4

read(byte[] buffer, int byteOffset, int byteCount)
此方法最多讀取length字節,並將它們存儲字節數組b中開始的偏移offset

例子

這裏有一個例子演示如何使用內部存儲來存儲和讀取文件。它創建了一個基本的存儲應用程序,它可以從內部存儲讀取並寫入。

爲了試驗這個例子,可以在實際設備或模擬器運行此。

步驟

描述

1

使用Android Studio創建Android應用程序,並將其命名爲: Storage 。在創建這個項目,確保目標SDK編譯在Android SDK的最新版本或使用更高級別的API

2

修改src/MainActivity.java文件中添加必要的代碼

3

修改res/layout/activity_main 添加相應XML組件

4

修改res/values/string.xml  添加必要的字符串

5

運行應用程序並選擇運行Android的設備,並在其上安裝的應用和驗證結果

以下是修改的主活動文件的內容 src/com.yiibai.storage/MainActivity.java.

package com.example.storage; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText et; private String data; private String file = "mydata"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et = (EditText)(findViewById(R.id.editText1)); } public void save(View view){ data = et.getText().toString(); try { FileOutputStream fOut = openFileOutput(file,MODE_WORLD_READABLE); fOut.write(data.getBytes()); fOut.close(); Toast.makeText(getBaseContext(),"file saved", Toast.LENGTH_SHORT).show(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void read(View view){ try{ FileInputStream fin = openFileInput(file); int c; String temp=""; while( (c = fin.read()) != -1){ temp = temp + Character.toString((char)c); } et.setText(temp); Toast.makeText(getBaseContext(),"file read", Toast.LENGTH_SHORT).show(); }catch(Exception e){ } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }

以下是XML修改res/layout/activity_main.xml. 的內容

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="182dp" android:onClick="save" android:text="@string/save" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button1" android:layout_alignRight="@+id/button1" android:layout_below="@+id/button1" android:layout_marginTop="46dp" android:onClick="read" android:text="@string/read" /> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button1" android:layout_alignParentTop="true" android:layout_marginTop="23dp" android:ems="10" android:inputType="textMultiLine" >

以下是 res/values/string.xml. 的內容

<string name="app_name">Storage <string name="action_settings">Settings <string name="hello_world">Hello world! <string name="save">save to intenal storage <string name="read">load from intenal storag

以下是 AndroidManifest.xml 的內容

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yiibai.storage" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.yiibai.storage.MainActivity" android:label="@string/app_name" > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />

讓我們試着來運行剛剛修改的存儲應用程序。安裝程序在AVD並啓動它,如果一切設置和應用程序都沒有問題,它會顯示以下仿真器窗口:

Android

現在,需要做的是在字段中輸入文本。舉例來說:這裏已經進入SOEM文本。按保存「save」按鈕。以下通報會出現在AVD如下:

Android

現在,當按下Load按鈕,應用程序將讀取該文件,並顯示數據。如下面的數據將返回:

Android

注意:可以通過切換到DDMS標籤查看此文件。在DDMS選擇文件瀏覽器和瀏覽這個路徑。

data>data>com.example.storage>files>mydata

這也顯示在下面圖中:

Android