文件存储的核心操作就是使用输入流和输出流来读写文件,在一定程度上可以存储大量
数据,但缺点是在文件更新或者格式更改时会给开发人员带来维护的负担。
一、主要方法
openFileOutput() 和 openFileInput() 用于操作程序自己私有的文件和数据。
openFileOutput() 用于对文件写入数据,语法格式:
OutputStream os = openFileOutput("text.txt", Context.MODE_PRIVATE);
openFileOutput() 方法的第 1 个参数指定文件名称,若文件不存在,Android会自动创建此文件,
这种处理机制类似于 SharedPreference,第 2 个参数指定此文件的操作模式,用来设置本程序
或者其他程序对此文件的操作权限,共有 4 种操作模式:
* Context.MODE_PRIVATE:默认操作,代表文件是私有数据,只能被本程序访问。在该模式下,
写入的内容会覆盖原来的内容。
* Context.MODE_APPEND:此操作会在原来文件的基础上追加数据。
* Context.MODE_WORLD_READABLE:表示此文件可以被其他应用读取。
* Context.MODE_WORLD_WRITEABLE:表示此文件可以被其他应用写入。
openFileInput() 方法用于打开应用程序下的文件,并进行读取,语法格式:
InputStream is = openFileInput("text.txt");
openFileInput() 方法的参数用于指定打开文件的名称。
二、实例
下面的实例介绍如何创建文件,以及对文件进行访问。先通过 openFileOutput 方法将 txtGetMsg 组件
中的内容写入文件,然后通过 openFileInput 方法对文件进行读取,并将内容显示到 txtShowMsg 组件。
代码:
//MainActivity.java
package com.th;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
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.Toast;
public class MainActivity extends Activity implements OnClickListener {
private EditText txtGetMsg, txtShowMsg;
private Button btnWrite, btnRead;
private final static String FILE_NAME = "text.txt";
private byte[] b = new byte[100];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtGetMsg = (EditText) findViewById(R.id.txtGetMsg);
txtShowMsg = (EditText) findViewById(R.id.txtShowMsg);
btnWrite = (Button) findViewById(R.id.btnWrite);
btnRead = (Button) findViewById(R.id.btnRead);
btnRead.setOnClickListener(this);
btnWrite.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnWrite:
OutputStream os;
try {
// 定义输出流
os = openFileOutput(FILE_NAME, Context.MODE_PRIVATE);
try {
// 写入文件
os.write(txtGetMsg.getText().toString().getBytes());
os.flush(); // 提交信息
os.close(); // 关闭输出流
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Toast.makeText(MainActivity.this, "写入文件成功!", Toast.LENGTH_SHORT).show();
break;
case R.id.btnRead:
InputStream is;
try {
// 定义输入流
is = openFileInput(FILE_NAME);
int count;
try {
count = is.read(b);
//获取文件信息
String str = new String(b, 0, count, "utf-8");
is.close(); //关闭输入流
txtShowMsg.setText(str);
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
}
布局文件:
<!-- activity_main.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="文件读写测试" />
<Button
android:id="@+id/btnWrite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="写入文件" />
<Button
android:id="@+id/btnRead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="读取文件" />
<EditText
android:id="@+id/txtGetMsg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<requestFocus />
</EditText>
<EditText
android:id="@+id/txtShowMsg"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
openFileOutput() 方法将文件保存至 /data/data/"package name"/files/text.txt。
在 eclipse 中打开 DDMS 视图,在File Explorer 下就可看到: