自帶內存上的讀寫(openFileOutput和openFileInput)android
效果圖示例編輯器
//這是在手機自帶內存上的讀和寫操做 -- 數據保存在data/data/包名/ide
//和SharePeferences讀和寫同樣都是在自帶內存上操做的,而SharePeferences利用編輯器進行讀寫操做佈局
//這個功能是利用openFileOutput和openFileInput進行寫和讀操做 -- 相同點:都是在自帶內存上操做ui
============================this
一、activity_main.xml佈局文件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"
tools:context="${relativePackage}.${activityClass}" >內存
<LinearLayout
android:id="@+id/one_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >utf-8
<EditText
android:id="@+id/edit_filename"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:hint="文件名" />
<Button
android:id="@+id/bt_sava"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存"
android:onClick="sava"/>
<Button
android:id="@+id/bt_read"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="讀取"
android:onClick="read" />
</LinearLayout>
<EditText
android:id="@+id/edit_filecontent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/one_layout"
android:background="#000"
android:hint="文件內容"
android:textColor="#fff" />
</RelativeLayout>
--------------------------------
二、菜單menu佈局的main_menu.xml佈局文件
代碼
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/selected"
android:title="選擇文件列表"/>
</menu>
==============================
三、MainActivity 類
代碼
public class MainActivity extends Activity {
private EditText edit_filename;
private EditText edit_filecontent;
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.edit_filename = (EditText) this.findViewById(R.id.edit_filename);
this.edit_filecontent = (EditText) this.findViewById(R.id.edit_filecontent);
}
//建立一個靜態選擇菜單
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
return super.onCreateOptionsMenu(menu);
}
//菜單的點擊 事件 監聽
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == R.id.selected){
//彈出一個選擇要讀的文件名 列表框
Dialog();
//獲取當前文件名 列表
//利用fileList()方法來讀取內存裏的文件
adapter.addAll(fileList());
}
return super.onOptionsItemSelected(item);
}
private void Dialog() {
//當點擊菜單 列表 時 建立一個 選擇文件列表框
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//設置 框的 屬性
builder.setTitle("選擇要讀取的文件名");
builder.setIcon(R.drawable.ic_launcher);
//new一個適配器 -- 該適配器 尚未內容
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
//把文件名 添加到 列表框
builder.setAdapter(adapter, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String filename = adapter.getItem(which);
edit_filename.setText(filename);
//把選擇的文件名 讀取內容
read(null);
}
});
builder.show();
}
//保存文件 public void sava(View view){ //獲取輸入的 文件名 String file_name = edit_filename.getText().toString().trim(); //獲取edit裏的文件的 內容 String file_content = edit_filecontent.getText().toString().trim(); //把得到的 文件名 和文件內容 保存到 內存 try { //第一個參數 -- 要保存的文件名 //第二個參數 -- 寫的模式 OutputStream os = openFileOutput(file_name, Context.MODE_PRIVATE); //把須要的數據 寫入內存 os.write(file_content.getBytes()); //提示 Toast.makeText(this, "保存成功!", Toast.LENGTH_SHORT).show(); os.close(); } catch (Exception e) { e.printStackTrace(); } } //讀取保存的文件 public void read(View view){ //獲取要讀的文件名 String file_name = edit_filename.getText().toString().trim(); //打開 要讀的文件名 try { InputStream is = openFileInput(file_name); byte[] b_read = new byte[is.available()];//文件的長度 粗略 is.read(b_read); //把讀完的 文件內容 顯示到 edit 編輯框 edit_filecontent.setText(new String(b_read)); is.close(); } catch (Exception e) { e.printStackTrace(); } }}