开发环境:
Win XP + eclipse-jee-helios(版本号3.6) + ADT(版本10.0.1) + Android SDK(版本10);
模拟器及真机测试环境:Android2.2
首先看一下文件数据存储方式
1.应用的界面布局如下,当用户点击“保存”按钮,应当可以以文件的形式保存用户输入的内容。

说明:文件可以保存在手机的两个位置,一个是手机自带的存储空间(一般这个容量比较小),另外一个是外存储设备(SDCard,一般容量比较大)。
2.在项目File->res->values目录下的string.xml文件中,定义布局中使用的字符串,代码如下:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, MainActivity!</string> <string name="app_name">文件操作</string> <string name="filename">文件名称</string> <string name="filecontent">文件内容</string> <string name="button">保存</string> <string name="success">保存完成</string> <string name="fail">保存失败</string> </resources>
3.在项目File->res->layout目录下的main.xml文件中实现上述布局,代码如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/filename" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/filename" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/filecontent" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:minLines="3" android:id="@+id/filecontent" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button" android:id="@+id/button" /> </LinearLayout>
4.为“保存”按钮添加点击处理事件
思路:找到按钮,监听点击事件,添加点击事件处理对象。
在MainActivity类的onCreate()方法中添加如下代码:
Button button = (Button)this.findViewById(R.id.button); button.setOnClickListener(new ButtonOnClickListener());
在MainActivity类中添加ButtonOnClickListener类:
private final class ButtonOnClickListener implements View.OnClickListener{
@Override
public void onClick(View v) {
EditText filenameText = (EditText)findViewById(R.id.filename);
EditText contentText = (EditText)findViewById(R.id.filecontent);
String filename = filenameText.getText().toString();
String content = contentText.getText().toString();
FileService service = new FileService(getApplicationContext());//参数是取得上下文对象
try {
service.save(filename,content);
Toast.makeText(getApplication(),R.string.success, 1).show();
} catch (Exception e) {
Toast.makeText(getApplication(), R.string.fail, 1).show();
e.printStackTrace();
}
}
}上面代码中的
service.save(filename,content);
是文件的保存的方法,在cn.hao.service包中创建FileService类,在该类中实现文件的保存读取方法,代码如下:
public class FileService {
private Context context;//Android提供的上下文对象
//通过构造器给context赋值
public FileService(Context context) {
super();
this.context = context;
}
/**
* 保存文件
* @param filename 文件名称
* @param content 文件内容
*/
public void save(String filename, String content) throws Exception{
//java中的IO技术来保存文件
//得到文件的输出流对象
FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_PRIVATE);//filename不可以带路径
//mode往文件写的模式:追加、覆盖、针对不同的组的操作权限
//Context.MODE_PRIVATE私有操作模式,创建出来的文件只能为本应//用使用;采用私有模式创建的文件
//写入文件中的内容会覆盖原文件内容,默认会保
//存在data/data/应用包下/files目录下
//将输出流写入文件
outStream.write(content.getBytes());
//写完文件之后要关闭流
outStream.close();
}
/**
* 读取文件内容
* @param filename 文件名称
* @return 文件内容
* @throws Exception
*/
public String read(String filename) throws Exception{
//方法openFileInput(filename)会默认从data/当前应
//用包下/files目录下读取
FileInputStream inStream = context.openFileInput(filename);
//从内存输出的数据流对象
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
//从文件中读取数据,先把输入流中的数据读取到一个字节数组中,//输入流中的数据可能很多,应该利用循环实现
byte[] buffer = new byte[1024];//定义一个字节数组
int len = 0;
//若未达到文件尾,就一直读
while((len = inStream.read(buffer)) != -1){
//得到每次读取到的数据
outStream.write(buffer, 0, len);
}
byte[] data = outStream.toByteArray();
//data和上面方法content.getBytes()的数据是一致的
return new String(data);
}
}引入测试,这时需要创建的类需要继承AndroidTestCase,并在AndroidManifest.xml文件中引入测试类库,这个在前面的文章以提到,在package cn.hao.Test下新建测试类FileServiceTest测试文件的读取方法,代码如下:
public class FileServiceTest extends AndroidTestCase {
//为日志定义一个标记
private static final String TAG = "FileServiceTest";
public void testRead() throws Throwable{
FileService service = new FileService(this.getContext());
//this.getContext()取得当前应用的上下文对象this.getContext()
//文件名称应该包含后缀名
String result = service.read("Hello.txt");
Log.i(TAG, result);
}
}将应用部署到模拟器上,运行的结果如下:

当点击保存时候就可以在data/data/files目录下看到该文件,导出到桌面,可以看到文件的内容就是输入的内容,效果如下:

运行测试方法testRead(),新建一个日志过滤器,就可以看到读取到的文件的内容:

转载自:http://blog.51cto.com/020618/1293664