Android初試--Android中的檔案操作之ROM操作(1)
RAM(Random Access Memory)隨機儲存器,在手機中稱為執行記憶體。通俗的說,就像電腦的記憶體。在斷電以後儲存在上面的資料會自動消失。
ROM(Read-Only Memory)只讀儲存器,存放手機韌體程式碼的儲存器,比如手機的作業系統、一些應用程式如遊戲等。通俗的說,就像電腦的硬碟。在斷電以後儲存在上面的資料不會自動消失。
SDCARD:通俗的說,就像外接硬碟。
①往手機自帶的儲存空間寫入檔案
FileOutputStream outStream = this.getContext().openFileOutput(“test.txt”, Context.MODE_PRIVATE);
outStream.write(“helloworld”.getBytes());
outStream.close();
openFileOutput(String name, int mode)方法的第一引數用於指定檔名稱,不能包含路徑分隔符“/”,如果檔案不存在,Android應用會自動建立它。
建立的檔案儲存在/data/data//files目錄,如:/data/data/com.rxr.file/files/test.txt,
通過點選Eclipse選單“Window”-“Show View”-“Other”,在對話視窗中展開Android資料夾,選擇下面的File Explorer檢視,然後在File Explorer檢視中展開/data/data/com.rxr.file/files目錄就可以看到儲存的檔案test.txt。
openFileOutput(String name, int mode)方法的第二引數用於指定操作模式,有四種模式,分別為:
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(“test.txt”, Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
android有一套自己的安全模型,當應用程式(.apk)在安裝時系統就會分配給他一個userid,如果該應用要去訪問其他資源比如檔案的時候,就需要userid匹配。
預設情況下,任何應用建立的檔案、SharedPreferences、資料庫都應該是私有的(位於/data/data//files),其他程式無法訪問。除非在建立時指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE,只有這樣設定其他程式才能正確訪問。
②從手機自帶的儲存空間裡面讀取檔案
FileInputStream inStream = this.getContext().openFileInput(“test.txt”);
//定義緩衝區大小
byte [] buffer = new byte[1024];
int len = 0;
//記憶體輸出流
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
//從輸入流裡面讀取資料到緩衝區,如果讀取到流的末尾返回-1,否則返回讀取到的實際位元組長度
while( (len = inStream.read(buffer)) != -1 ){
//往記憶體中寫入資料
outStream.write(buffer, 0, len);
}
//獲取記憶體中該檔案的二進位制資料
byte [] data = outStream.toByteArray();
outStream.close();
inStream.close();
Activity的getFilesDir()方法:返回/data/data/com.rxr.file/files檔案物件
Activity的getCacheDir()方法:返回/data/data/com.rxr.file/cache檔案物件,存放一些快取資料
import java.io.FileInputStream;
import java.io.FileOutputStream;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText inputtext=null;
private Button save=null;
private Button read=null;
private TextView showdata=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//載入佈局檔案
setContentView(R.layout.activity_main);
//元件的初始化
init();
}
/*
* 元件的初始化
*/
private void init() {
inputtext= (EditText)findViewById(R.id.editText1);
save= (Button)findViewById(R.id.button1);
read= (Button)findViewById(R.id.button2);
showdata= (TextView)findViewById(R.id.textView2);
MyClick click=new MyClick();
//給按鈕新增單擊事件
save.setOnClickListener(click);
read.setOnClickListener(click);
}
/*
* 單擊事件的介面類
*/
public class MyClick implements OnClickListener{
@Override
public void onClick(View view) {
switch(view.getId()){
case R.id.button1:
//儲存資料到手機自帶的儲存空間
saveDataToRom();
Toast.makeText(MainActivity.this, "資料儲存成功", 3000).show();
break;
case R.id.button2:
//從手機自帶的儲存空間讀取資料
fromRomReadData();
break;
}
}
}
/*
* 儲存資料到手機自帶的儲存空間
*/
public void saveDataToRom() {
//得到文字框中輸入的資料
String info=inputtext.getText().toString();
//開啟輸出流
//openFileOutput有兩個引數
//第一個引數 儲存檔案的檔名稱
//第二個引數 檔案的操作模式
/*
* Context.MODE_PRIVATE = 0 私有模式,不允許追加
Context.MODE_APPEND = 32768 私有模式,允許追加
Context.MODE_WORLD_READABLE = 1 允許其他程式只讀
Context.MODE_WORLD_WRITEABLE = 2 允許其他程式可寫
*/
try {
FileOutputStream output=this.openFileOutput("rxr.txt", Context.MODE_APPEND);
//儲存資料
output.write(info.getBytes());
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 從手機自帶的儲存空間讀取資料
*/
public void fromRomReadData() {
String info="";
//得到輸入流物件
try {
FileInputStream input=this.openFileInput("rxr.txt");
byte databyte[]=new byte[1000];
int len=input.read(databyte);
info=new String(databyte,0,len);
input.close();
} catch (Exception e) {
e.printStackTrace();
}
//將資料顯示在textview上
showdata.setText(info);
}
}