Android資料存放區方式之:檔案儲存體
android應用大多數用的java開發,所以java的檔案操作在android中完全適用,只不過android對手機而言,多了個外儲存設定SD卡。
----------------------------------------------簡單的介面布局-----------------------------------------------------------
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
android:id="@+id/input_edt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="請輸入儲存內容" />
android:id="@+id/write_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="儲存資料" />
android:id="@+id/read_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="讀取資料" />
-----------------------------功能代碼-----------------------------------------------------------
public class MainActivity extends Activity implements OnClickListener {
/**內容輸入框 */
private EditText inputEdt;
/**儲存(寫入)按鈕 */
private Button writeBtn;
/**讀取按鈕 */
private Button readBtn;
/**要儲存的檔案名稱*/
private static final String FILE_NAME = "temp_file.txt";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewsById();
}
private void findViewsById() {
inputEdt = (EditText) findViewById(R.id.input_edt);
writeBtn = (Button) findViewById(R.id.write_btn);
readBtn = (Button) findViewById(R.id.read_btn);
writeBtn.setOnClickListener(this);
readBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.write_btn:
writeData();
break;
case R.id.read_btn:
String result = readData();
inputEdt.setText(result);
break;
}
}
/*
* 方法openFileOutput(FILE_NAME, Activity.MODE_PRIVATE); 參數說明:以FILE_NAME檔案名稱,Activity.MODE_PRIVATE檔案的應用模式,開啟一個輸出資料流如果檔案不存系統會為你建立一個 注意這裡的檔案名稱不能包括任何的/或者/這種分隔字元,只能是檔案名稱
* 該檔案會被儲存在/data/data/應用程式名稱/files/temp_file.txt 檔案的操作模式有以下四種:MODE_PRIVATE 私人(只能建立它的應用訪問) 重複寫入時會檔案覆蓋MODE_APPEND 私人 重複寫入時會在檔案的末尾進行追加,而不是覆蓋掉原來的檔案 MODE_WORLD_READABLE 公用 可讀 MODE_WORLD_WRITEABLE 公用 可讀寫
*/
private void writeData() {
String content = inputEdt.getText().toString();
try {
FileOutputStream outputStream = openFileOutput(FILE_NAME, Activity.MODE_PRIVATE);
outputStream.write(content.getBytes());
outputStream.flush();
outputStream.close();
Toast.makeText(MainActivity.this, "儲存成功", Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 把剛剛儲存的資料讀出來
* */
private String readData() {
String content = "";
try {
FileInputStream inputStream = this.openFileInput(FILE_NAME);
byte[] bytes = new byte[1024];
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
while (inputStream.read(bytes) != -1) {
arrayOutputStream.write(bytes, 0, bytes.length);
}
inputStream.close();
arrayOutputStream.close();
content = new String(arrayOutputStream.toByteArray());
} catch (Exception e) {
e.printStackTrace();
}
return content;
}
/****************上面的內容是把內容存到手機記憶體中*************************************/
/**判斷SDcard是否存在並且可讀寫*/
private boolean isSDcardExist() {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
return true;
} else {
Toast.makeText(getApplicationContext(), "記憶卡不可用", 1000).show();
return false;
}
}
/**往記憶卡中存檔案*/
public void writeToSDCard(String filename, String filecontent) throws Exception {
File file = new File(Environment.getExternalStorageDirectory(), filename);
FileOutputStream outStream = new FileOutputStream(file);
outStream.write(filecontent.getBytes());
outStream.close();
}
/**讀SD卡中對應檔案的內容*/
private String readSDCardFile(String filePath, String fileName) {
String result = "";
try {
File file = new File(filePath, fileName);
FileInputStream is = new FileInputStream(file);
byte[] b = new byte[is.available()];
is.read(b);
result = new String(b);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
---------註:-------------------------------------------
SD卡操作不要忘記在AndroidManifest.xml中添加對應許可權: